【发布时间】:2017-07-11 07:00:49
【问题描述】:
我需要创建一个基于 EXPRESS 模式的类库。 EXPRESS 模式的类型和实体如下所示:
ENTITY IfcRoot
ABSTRACT SUPERTYPE OF (ONEOF
(IfcObjectDefinition
,IfcPropertyDefinition
,IfcRelationship));
GlobalId : IfcGloballyUniqueId;
OwnerHistory : OPTIONAL IfcOwnerHistory;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
UNIQUE
UR1 : GlobalId;
END_ENTITY;
这里的GlobalId、OwnerHistory、Name和Description都是IfcRoot类的属性。例如“Name”的属性类型是 IfcLabel,它在 EXPRESS 模式中作为 TYPE 给出,如下所示:
TYPE IfcLabel = STRING(255);
END_TYPE;
该类型是字符串类型或井字符串数组。在我的方法中,我将模式中的所有实体和模式中的所有类型都实现为 chsharp 中的类。因此我写了一个字符串阅读器,它读取模式并基于它创建实体(~800)和类型(~400)。 我的实现中的 IfcLabel 如下所示:
public class IfcLabel
{
public string _value { get; set; }
}
这一切都很好,但是当我想使用我的类库时,它真的很费力,因为每个属性类型都是一个类本身。这意味着我必须首先创建 IfcLabel-Class 的对象并分配 _value 属性,然后创建我的 IfcRoot-object 并将 Name-property 分配为 IfcLabel-object。 有谁知道,我如何以更智能的方式实现它? 还有一件事要补充:所有类型都需要有一个方法并从一个名为 IfcBase 的类继承,所以这仍然需要成为可能。我也不允许直接将属性类型从 IfcLabel 更改为字符串,无论如何它实际上是最后的。
【问题讨论】:
-
我以前没有听说过这个,但从我快速阅读的内容来看,这似乎是解决我问题的可能方法。我会进一步研究它,谢谢!
-
我不确定,但我认为
express标签不是一个好标签,因为它看起来不像这里的nodeJs 框架实现 -
我之所以这么说是因为这是调用模式的类型。你还有什么推荐的?
-
刚刚编辑了我的标签,希望能得到答案。为单挑干杯!