| 

.NET C# Java Javascript Exception

1
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?

Würde mich über Antworten sehr freuen.
News:
12.08.2009
Mammal 195 2 6
3 Antworten
2
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.

Links:
Interpreter design-pattern
Interpreter design-pattern (siehe Reald world example)

Du Armer ;)
13.08.2009
gfoidl 9,4k 3 5
Danke für deine Tipps und für dein Mitleid :) Unglaublich, dass die kein xsd machen können...
Mammal 13.08.2009
1
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;
}
}
08.09.2009
DaSpors 4,2k 2 8
0
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.
13.08.2009
gfoidl 9,4k 3 5
Klar ist es nicht stand der Zeit, da aber die Gerichte nur dieses eine alte und total lächerliche Format akzeptieren muss es leider so sein :/
Mammal 13.08.2009
Aha - die Mühlen der Justiz ;) Gibts irgendwo Infos wie das Format aufgebaut ist - dann kann ich mir was überlegen.
gfoidl 13.08.2009
Google mal nach "eda 4000 konditionen", ist ein PDF =)
Mammal 13.08.2009

Stelle deine Design-pattern-Frage jetzt!