Frage

Es war eine sehr interessante Diskussion über die LosTechies bezüglich AutoMapper (ein Argument für / gegen 2-Wege-Mapping).

Das fing eigentlich meine Aufmerksamkeit wegen des Problems arbeite ich zur Zeit durch. Ich arbeite an einer Sendung Stück Informationen wie Preise / Lieferzeiten zu meinen Benutzern zur Verfügung zu stellen. Um die tatsächlichen Dienste zu zentralisieren, habe ich einen WCF-Webdienst, die alle Domänen Einheiten weiterhin besteht.

das Domänenmodell zu vereinfachen, habe ich im Grunde zwei Klassen:

public class Shipment
{
 public IList<Item> Items{get;set;}
}

public class Item
{
 //some primitive properties
}

Ich habe auch einen entsprechenden Satz von DTOs, der die Last über den Draht zu erleichtern erstellt wurden. Die Präsentation Stück (oder Stücke, was den Web-Service berührt), die DTOs ohne Kenntnis des Domain-Modells verwenden.

Meine Frage kommt hier. Um eine Sendung zu erstellen, übernimmt der Dienst eine Liste der Elemente. Es ist die Logik zur Schaffung Sendungen, die alle hinter dem Web-Dienst verborgen ist. Im Wesentlichen bedeutet dies, dass ItemDTO über den Draht geführt wird (Client -> Server), Sendungen erstellt werden, dann wird ShipmentDTO zurückgegeben (Server -> Client). Nun ShipmentDTO hat ein Kind Liste des ItemDTO als auch, was das Szenario 2-Wege-Mapping erstellt.

Das ist mehr als ein einfacher CRUD Betrieb und ich bin farely neu in die Befehlsnachricht Muster, so dass ich bin gespannt, wie die Gemeinschaft dieses Problem lösen würde.

Sie übergeben Sie ein DTO in beiden Richtungen mit 2-Wege-Mapping?

Probenverbrauch (Darstellungsschicht):

List<ItemDTO> list = new List<ItemDTO>();
//add items to list


ShipmentServiceClient client = new ShipmentServiceClient();
List<ShipmentDTO> shipments = client.GetShipments(list);

//shipments are now displayed to the user
//with respective costs and other useful data
War es hilfreich?

Lösung

Etwas, das in diesem Beitrag erwähnt wurde, dass ich die Formulierung in einer Antwort nicht ganz Griff tat war. „Eingehende DTOs abgebildet werden Nachrichten gebieten“. Zu sagen, DTOs bidirektional sein kann, die Zuordnungen (AutoMapper) zur Verfügung gestellt, sind jedoch unidirektional.

Andere Tipps

Bei Gefahr, dass der Punkt Ihrer Frage fehlt, werde ich sagen, dass es OK ist ein DTO bidirektional zu verwenden, solange Sie nicht die DTO wiederverwenden aus dem falschen Grund. In Ihrem Fall ist die Anforderung an den Server eine Sendung für ein Bündel von Elementen bevölkern jedes ItemDTO voll zu schaffen, so dass, wenn der Server es zurückkommt, sind die ItemDTOs im Grunde das gleiche? Oder fordern Sie wirklich mehrere Einzelteile zu versenden, aber die ItemDTO, die hat kommt wieder einige zusätzliche Details von dem Server (zum Beispiel pro-Punkt Transportkosten, Inventarstatus, etc.) ausgefüllt? Wenn letzteres der Fall, würde ich sagen, man sollte die ItemDTO nicht wieder verwenden beide ein bestimmtes Element darstellen wird für den Versand und die Versand Details zu einem Element angefordert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top