Ich muss eine Klassenbibliothek basierend auf einem EXPRESS-Schema erstellen. Der EXPRESS-Schema hat Typen und Entitäten, die wie folgt zusammen:So implementieren Sie EXPRESS in CSharp die effizienteste
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;
In hier GlobalId, OwnerHistory, Name und Beschreibung sind alle Eigenschaften der Klasse IfcRoot. Der Objekttyp von zum Beispiel „Namen“ ist IfcLabel, die als TYPE im EXPRESS-Schema gegeben ist wie folgt aussehen:
TYPE IfcLabel = STRING(255);
END_TYPE;
Dieser Typ ist vom Typ String oder auch String-Array. In meinem Ansatz implementierte ich alle Entitäten im Schema und alle Typen im Schema als Klassen in chsharp. Deshalb habe ich einen String-Reader geschrieben, der das Schema liest und daraus die Entitäten (~ 800) und die Typen (~ 400) erstellt. IfcLabel in meiner Implementierung sieht wie folgt aus:
public class IfcLabel
{
public string _value { get; set; }
}
Alles ganz gut funktioniert, aber wenn ich es meine Klassenbibliothek verwenden wollen, ist wirklich mühsam aufgrund der Tatsache, dass jeder Attributtyp eine Klasse selbst ist. Bedeutung Ich muss zuerst ein Objekt der IfcLabel-Klasse erstellen und die Eigenschaft _value zuweisen und dann mein IfcRoot-Objekt erstellen und die Name-Eigenschaft als IfcLabel-Objekt zuweisen. Hat jemand eine Idee, wie ich das intelligenter umsetzen kann? Es gibt noch eine weitere Sache hinzuzufügen: Alle Typen müssen eine Methode haben und von einer Klasse namens IfcBase erben, so dass dies noch möglich sein muss. Ich bin auch nicht berechtigt, den Eigenschaftstyp von IfcLabel direkt in String zu ändern, was er eigentlich am Ende sowieso ist.
[Fabrikmuster?] (Https://www.google.com/search?q=factory+pattern&ie=utf-8&oe=utf-8&client=firefox-b) – TaW
Ich habe vorher nicht darüber gehört, aber Von dem, was ich schnell gelesen habe, sieht es wie eine mögliche Lösung für mein Problem aus. Ich werde mehr darüber nachdenken, danke! – FlixFix
Ich bin mir nicht sicher, aber ich denke, dass das 'express'-Tag nicht das gute ist, da es nicht wie eine NodeJs Framework-Implementierung hier – mJehanno