Konvertieren eines benutzerdefinierten komplexen Typs in einen anderen benutzerdefinierten komplexen Typ

8

Ich habe also zwei benutzerdefinierte komplexe Typen (für dieses Beispiel stark vereinfacht):

%Vor%

Nehmen wir an, ich brauche dieses Objekt, um zu wissen, wie es sich in einen anderen Typ umwandeln kann:

%Vor%

Wenn ich also eine Methode zum Konvertieren von PendingProduct in Product aufruft, führe ich eine benutzerdefinierte Logik aus, die der Product-Klasse eine "ColorCount" -Nummer von ProductColor-Objekten hinzufügt. Das ist völlig vereinfacht, aber die Architektur der Klasse ist hier wirklich irrelevant.

Was meine Hauptfrage ist, ist dies:

Welche Best-Practice-Methode wird verwendet, um die Konvertierung eines komplexen Typs in einen anderen komplexen Typ zu implementieren, wenn sich die Eigenschaften der Objekte unterscheiden?

In der realen Welt sind die Eigenschaften sehr unterschiedlich und ich werde eine benutzerdefinierte Logik schreiben, um das, was ich brauche, von Objekt A zu Objekt B zu mappen.

Offensichtlich könnte ich einfach eine Funktion schreiben, die einen Eingabeparameter von Objekt A nimmt und Objekt B zurückgibt, aber ich suche nach einer "Best Practice" -Methode. Kommt IConvertible hier ins Spiel? Gibt es etwas mehr OOP-ähnliches, das ich nutzen kann, anstatt nur eine Funktion zu schreiben, um das zu tun, was ich will?

Objekt A sollte immer wissen, wie es sich in Objekt B umwandelt.

BEARBEITEN: Als eine Randnotiz sind in der realen Welt Objekt A und Objekt B beide Entity Framework 4-Entitäten. Ich möchte ein "Pending Product" nehmen, es in eine neue Product Entity umwandeln, es an den Datenkontext anhängen und speichern.

    
Scott 14.01.2011, 19:38
quelle

2 Antworten

18

Es gibt viele Möglichkeiten, dies zu erreichen, aber sie laufen entweder darauf hinaus, den Mapping-Code selbst zu schreiben, ihn durch Reflektion zu behandeln oder sich auf ein vorgefertigtes Framework wie AutoMapper . Ich habe eine ähnliche Frage in einer anderen SO Frage hier beantwortet.

Ich füge es hier zu Ihrer Referenz hinzu:

Realistisch könnte man

1.Reflektion

%Vor%

2.Copy-Konstruktor

%Vor%

3. Implizite / explizite Konvertierung

%Vor%

4.AutoMapper

%Vor%

5.Kombination von 3/4:

%Vor%

Eine Anmerkung zu impliziten / expliziten Konvertierungsoperatoren: Ich glaube daran, dass Sie CLS-konformen Code nicht generieren werden.

Mit AutoMapper können Sie anpassen, wie verschiedene Eigenschaften des Zieltyps überlagert werden, z. B .:

%Vor%     
Matthew Abbott 14.01.2011, 19:42
quelle
0

Möchten Sie PendingProduct nicht vom Produkt ableiten?

%Vor%     
Chris Gessler 14.01.2011 19:56
quelle