Domanda

C'è stata una discussione molto interessante su LosTechies riguardanti automapper (un argomento a favore / contro la mappatura a 2 vie).

Questo in realtà attirato la mia attenzione a causa del problema Attualmente sto lavorando attraverso. Sto lavorando su un pezzo spedizione di fornire informazioni quali prezzi / tempi di consegna per i miei utenti. Per centralizzare i servizi attuali, Ho un servizio Web WCF che persiste qualsiasi entità di dominio.

Per semplificare il modello di dominio io fondamentalmente ho 2 classi:

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

public class Item
{
 //some primitive properties
}

Ho anche una corrispondente serie di DTOs che sono stati creati per alleggerire il carico attraverso il filo. Il pezzo di presentazione (o pezzi, tutto ciò che toccherà il servizio web), utilizzare i DTOs senza alcuna conoscenza del modello di dominio.

La mia domanda viene qui. Per creare una spedizione, il servizio accetta un elenco di elementi. C'è logica per le spedizioni che creano, che è tutto nascosto dietro il servizio web. In sostanza, questo significa che ItemDTO viene passato attraverso il filo (client -> server), si creano le spedizioni, quindi ShipmentDTO viene passato (server -> client). Ora, ShipmentDTO ha una lista figlio di ItemDTO pure, che crea lo scenario mappatura a 2 vie.

Questo è più di una semplice operazione CRUD e io sono almeno i prezzi sono una novità per il modello Messaggio di comando, quindi sono curioso di come la comunità possa risolvere questo problema.

Non si passa un DTO in entrambe le direzioni con la mappatura a 2 vie?

Utilizzo del campione (livello di presentazione):

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
È stato utile?

Soluzione

Qualcosa che è stato menzionato in questo post che ho fatto non è abbastanza stretta era la formulazione di una risposta. "DTOs in arrivo vengono mappati a comandare i messaggi". Dicendo, DTOs può essere bidirezionale, le mappature (Automapper) forniti, tuttavia sono unidirezionali.

Altri suggerimenti

A rischio di perdere il punto della tua domanda, io dico che è bene usare un DTO bidirezionale, fino a quando non si sta ri-utilizzando il DTO per la ragione sbagliata. Nel tuo caso, è la richiesta al server per creare una spedizione per un mucchio di elementi completamente popolano ogni ItemDTO, in modo che quando il server riceve indietro, i ItemDTOs sono fondamentalmente gli stessi? Oppure, siete davvero richiedendo spedire diversi elementi, ma l'ItemDTO che ritorna ha alcuni dettagli aggiuntivi compilati dal server (ad esempio, per-voce di costo di trasporto, lo stato di inventario, ecc)? Se quest'ultimo caso, direi che non si deve riutilizzare l'ItemDTO per rappresentare sia un elemento particolare dalla richiesta per la spedizione e i dettagli di spedizione su un elemento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top