Je suis en train de concevoir une nouvelle application à grande échelle qui doit être aussi flexible que possible.
J'ai choisi de concevoir principalement avec DDD ..
Ma question concerne le transfert d'objets DTO vers des objets DO dans ma couche de service.Conception de la couche de service DTO et DO
i.e.: Ceci est mon objet de domaine mis en correspondance avec la DB (utilisant ORM)
public class Cat
{
int ID {get; set;}
string Name {get; set;}
string BloodType {get; set;}
string Color {get; set;}
void Run(){...}
void Purr() {...}
}
Méthodes et certaines propriétés ne sont nécessaires que pour les actions du serveur.
Voilà pourquoi je conçu un autre objet de transfert de données pour ce type de chat:
public class CatDTO
{
int ID {get; set;}
string Name {get; set;}
}
Au milieu, je vais mettre en place un mappeur objet de traduire mon DO de (et vice versa) de DTO.
Lorsqu'un client souhaite mettre à jour il appellera un service comme celui-ci
public void UpdateCat(CatDTO cat)
{
// What will happen here?
Cat serverCat = Mapper.GetCat(CatDTO);
CatDao.SaveOrUpdate(serverCat);
}
nom d'un chat Lorsque le mappeur traduit le DTO objet à le faire devra frapper la DB afin de combler le manque propriétés de l'objet Cat (type de sang, etc.) Aiguilles pour dire que cette action est absurde mais sans remplir les propriétés vides le reste du côté serveur ne peut pas fonctionner avec l'objet Cat car il dépend de ces propriétés manquantes (même si je essayer de mettre à jour les données dans la BD, My ORM mettra à jour le champ bloodtype sous la forme d'une chaîne vide!)
J'ai cherché ce problème et je n'ai trouvé aucune explication sur le web (ou au moins quelqu'un qui est ennuyé avec le problème comme je le fais)
Suis-je le concevoir dans le mauvais sens? Peut-être que j'ai raté quelque chose dans mon DDD?
Merci, Pavel.
eulerfx, Merci pour la réponse! Il semble toujours un peu étrange de frapper la DB chaque fois qu'une demande vient du client .. Peut-être que je devrais juste faire une méthode comme UpdateCatName (id, name)? Ou la meilleure pratique est de rester avec les DTO? –
Une méthode comme 'UpdateCatName (id, name)' sur le service d'application est encore meilleure car elle ne nécessite pas de nouvelle classe. Un DTO peut toujours exister pour prendre en charge le transport si nécessaire dans votre architecture. – eulerfx
@PavelTarno J'ai travaillé sur la même chose. Avez-vous considéré un pattern Assembler sur la couche Domain? Si vous utilisez un DTO, utilisez-vous pour la messagerie? Je prends ça WCF? En ce qui concerne le modèle Assembler, j'ai trouvé de superbes tutoriels sur http: //www.cs.sjsu.edu/~ pearce/modules/patrons/enterprise/persistence/dto.htm (Java, mais la logique est la même) et site Microsoft http://msdn.microsoft.com/fr-fr/library/ms978717.aspx –