2009-06-03 15 views
1

Ich habe eine Klasse mit wenigen Eigenschaften A, B, C. Ich betrachte dies als ein Eingabeobjekt, da ich dies in der Logik verwende, um einige Regeln basierend auf den Werten dieser Eigenschaften auszuführen. Jetzt, nachdem ich die Regeln ausgeführt habe, habe ich eine weitere Klasse als Ausgabe mit denselben Eigenschaften und mit denselben Werten zusätzlich zu einigen anderen Eigenschaften, die für die Ausgabe spezifisch sind, erstellt.Eigenschaften unter mehreren Klassen teilen

Jetzt ist meine Frage, wie ich diese Eigenschaften (A, B, C) zwischen den Eingabe- und Ausgabeklassen teilen, ohne den Wert von der Eingabe der Ausgabe manuell zuweisen zu müssen. Können Sie mir einen effektiven Entwurf vorschlagen, den ich verwenden muss? Ist das abstrakte Klassenkonzept hier im Bild? Oder gibt es einen anderen effektiven Weg?

Antwort

0

Verwenden Sie eine Zwischenklasse, die nur die Eigenschaften besitzt und dann auf die Instanz dieser Klasse von Ihren Eingabe- und Ausgabeobjekten zugreift. In den meisten Fällen ist es jedoch einfacher, die Werte von Ihrer Eingabe in Ihre Ausgabe zu kopieren.

0

Haben Sie darüber nachgedacht, singleton Entwurfsmuster zu verwenden? Ich bin nicht vertraut mit der Spezifikation Ihres Projekts, aber es scheint, dass es Ihnen helfen kann oder zumindest Ihnen Richtung gibt.

0

Sie könnten einen impliziten Operator (C#) auf der Ausgabeklasse definieren wie folgt:

public static implicit operator OutputClass(InputClass m) 
{ 
    this.A = m.A; 
    this.B = m.B; 
    this.C = m.C; 
} 

Dann alles, was Sie tun müssten ist:

output = input; 

und Sie würden effektiv über alle bringen die Daten von der Eingabe, die Sie in der Ausgabe möchten.

0

Optionen - Singleton - funktioniert aber hängt von Wiederverwendungsszenarien ab. Verwenden Sie eine andere Art von Fabrik- oder Instanzmuster als "new MyObj()"? wenn ja, kann die Fabrik die Arbeit machen - was zur nächsten Methode führt - Injektion. Unterstützt Ihre Sprache Injektion oder eine Art (aka - Frühling). Sie können eine Setter-Methode definieren, aber lassen Sie es dem Injection-Framework und/oder den Factory-Methoden überlassen, das Setup durchzuführen - auch dies hängt von den Anwendungsfällen ab.

Wenn die Laufzeitumgebung basiert, müssen Sie composition - delegate entweder für einen Verweis auf die Originalobjekte oder ein Zwischenobjekt verwenden (das wiederum A, B C usw. umschließt).

Wahrscheinlich ein bisschen links vom Feld, aber ich nehme an, dass Ihre Frage ein einfacher Fall ist, nur um einige Vorschläge für ein größeres Problem zu bekommen.

Sind die Eigenschaften dynamisch - Kompilierungszeit vs. Laufzeit? werden sie sich ändern (zB. dynamische Updates von einer Datenbank handhaben). Müssen Sie in einem Testkabelbaum oder mit Scheinwerten laufen und dann im Rahmen der vollständigen Anwendung testen?

0

Ohne zu wissen, mehr, ich glaube, Vererbung und polimorphism der Weg zu gehen ist:

class input 
{ 
    public int A { get; set;} 
    public int B { get; set;} 
    public int C { get; set;} 
} 

class output : input { 
    public int D { get; set;} 
    public int E { get; set;} 
    public int F { get; set;} 
} 

Die Sie einfach do:

void main() 
{ 
    output tpt = new output(); 
    tpt.A = 3; 
    tpt.B = 2; 
    tpt.C = 4; 

    tpt = dosomething((input)tpt); 
} 

public output dosomething(input inpt) 
{ 
    //blablabla 
    output tpt = (output)inpt; 
    tpt.D = 1; 
    tpt.E = 2; 
    tpt.F = 3; 

    return tpt; 
} 
Verwandte Themen