Ich bastel gerade an einer Schnittstelle, die mehrere Objekte in ein Datenformat schreibt, dass auf einem Bytesystem aufgebaut ist. Konkretes Beispiel: Es gibt eine Person, die Attribute wie Adresse, Alter usw. hat. Nun sieht das Datenformat etwa so aus:
01KS 00 X870074746524STADTNAME 4015464 XX
Es werden relativ viele dieser "Sätze" geschrieben und es gibt rund 50 verschiedene Art und Weisen wie diese Strings aufgebaut werden.
Nun Frage ich mich ob ich diese doch eher unübersichtliche Schreibweise irgendwie kapseln kann. Vielleicht über eine Facade?
Ein Interpreter könnte das Lösen. Es geht abstrahiert gesehen darum die Ausgangssprache (deine Objekte) in die Zielsprache (eda 4000) zu übersetzen.
D.h. die Regeln von eda 4000 müssen als Grammatik implementiert werden und dann kann die Sprache in das eda 4000-Format übersetzt (interpretiert) werden.
Du könntest auch Deine Objekte in C# realisieren und die zu schreibenden Daten als Properties implementieren. Die würde ich dann mit einem Attribut versehen, so dass Du einen zentralen Prozessor schreiben kannst, der die 'übersetzt'.
[EdaField("BB")] class Irgendwas: EdaBase { string feld = "wert";
[EdaField(8, "N", "TKEZI")] string Feld { get { return feld; } set { feld = value; } } }
class EdaBase { public override string ToString() { string res = ""; Attribute[] set = GetType().GetCustomAttributes(typeof(EdaSetAttribute)); foreach (Attribute a in set) res += (a as EdaSetAttribute).Name + " ";
PropertyInfo[] pi = GetType().GetProperties(); foreach( PropertyInfo p in pi ) { set = p.GetCustomAttributes(typeof(EdaFieldAttribute); foreach (Attribute a in set) { EdaFieldAttribute efa = (a as EdaFieldAttribute); res += efa.Type + " " + efa.Id + " " +efa.Size + " "; } } return res; } }
class EdaSetAttribute : Attribute { public string Name;
public EdaSetAttribute(string name) { Name = name; } }
class EdaFieldAttribute : Attribute { public int Size; public string Type; public string Id;
public EdaFieldAttribute(int size, string type, string id) { Size = size; Type = type; Id = id; } }
Wozu willst du das neue erfinden? Mit Serialisierung (binär, xml, ...) gibt es schon erprobte und etablierte Möglichkeiten Daten zu persistieren. Ich meine auch dass die Zeit der proprietären Dateiformate eher dem Ende neigt denn immer öfters wird XML dazu verwendet (zB bei MS Office auch möglich). Du handelst dir damit nur mehr Probleme ein als es dir bringen wird. Setzte auf XML. Dies kann auch einfach von Menschen gelesen werden um zu Prüfen ob die Daten korrekt sind.
Aus diesem Grund werde ich die eigentliche Frage nicht beantworten denn meiner Meinung nach ist das der falsche Weg.
in ein Datenformat schreibt, dass auf einem Bytesystem
AFAIK ist im Computer alles auf Bytes und in folge dessen auf einem Bytesystem aufgebaut ;)
PS: Schau dir mal 'Interpreter' und 'Chain of Responsibility' an.