J'ai besoin de créer une bibliothèque de classes basée sur un schéma EXPRESS. Le schéma EXPRESS a des types et des entités qui ressemblent à ce qui suit:Comment implémenter EXPRESS dans CSharp le plus efficace
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;
Ici GlobalId, OwnerHistory, le nom et la description sont toutes les propriétés de la IfcRoot de classe. Le type de par exemple « Nom » de la propriété est IfcLabel, qui est donné comme un type dans le schéma EXPRESS qui ressemble à ceci:
TYPE IfcLabel = STRING(255);
END_TYPE;
Ce type est du type String ou bien tableau de chaînes. Dans mon approche, j'ai implémenté toutes les entités du schéma et tous les types dans le schéma comme des classes dans chsharp. Par conséquent, j'ai écrit un lecteur de chaîne, qui lit le schéma et crée les entités (~ 800) et les types (~ 400) sur cette base. IfcLabel dans ma mise en œuvre ressemble à ceci:
public class IfcLabel
{
public string _value { get; set; }
}
tout cela fonctionne tout à fait bien, mais quand je veux utiliser ma bibliothèque de classes, il est vraiment laborieux en raison du fait que chaque type d'attribut est une classe elle-même. Signification Je dois d'abord créer un objet de la classe IfcLabel et affecter la propriété _value, puis créer mon objet IfcRoot et affecter la propriété Name en tant qu'objet IfcLabel. Est-ce que quelqu'un a une idée, comment je peux l'implémenter d'une manière plus intelligente? Il y a encore une chose à ajouter: tous les types doivent avoir une méthode et hériter d'une classe appelée IfcBase, ce qui doit toujours être possible. Je ne suis pas non plus autorisé à changer directement le type de propriété d'IfcLabel en chaîne, ce qui est en fait à la fin de toute façon.
[motif d'usine?] (Https://www.google.com/search?q=factory+pattern&ie=utf-8&oe=utf-8&client=firefox-b) – TaW
Je n'ai jamais entendu parler de ça auparavant, mais de ce que je lis rapidement, cela ressemble à une solution possible à mon problème. Je vais y regarder de plus près, merci! – FlixFix
Je ne suis pas sûr à ce sujet mais je pense que la balise 'express' n'est pas la bonne puisqu'elle ne ressemble pas à une implémentation de framework nodeJs ici – mJehanno