8
votes

Objets de domaine et objets de valeur - sont-ils égaux?

En regardant l'exemple d'un objet de domaine dans le didacticiel Zend QuickStart, et d'autres exemples en considérant des modèles DAO / VO, ils semblent tous deux très similaires.

Peut-on déduire que "l'objet de la valeur" est identique à dire "objet de domaine"?

Sinon, pouvez-vous clarifier les différences entre ceux-ci?

Quelle est la fonction d'un, et si la fonction d'une autre?

Je le demande parce que les deux sont composés de getters et de setters et rien de plus que cela. Il semble que, ils font la même fonction ...

mise à jour:

Donc, Zend Framework Documentation Documentation appelée Ceci, objet de domaine: < / p> xxx

1) strictement parlant, sommes-nous confrontés à un "objet de domaine anémique"?

2) est-il appelé "objet de domaine" juste car il contient la logique de domaine?

3) Si tel est le cas, ces mappeurs contenant des méthodes telles que FindbookByauthor (); Ils traitent également de la logique de domaine juste? Pourraient-ils être considérés comme des objets de domaine aussi?

Merci beaucoup


0 commentaires

3 Réponses :


2
votes

Ils peuvent être la même chose. Et dans de nombreux cas, ils sont. Cependant:

  • Les objets de domaine peuvent effectuer une logique commerciale (selon la conception à l'aide de domaines au moins), les objets de valeur ne peuvent pas
  • Les objets de domaine ont toutes les informations, tandis que les objets de valeur ne contiennent qu'une partie des informations pertinentes pour son consommateur.

    Par exemple, dans le cas d'un objet de la facture , il sera identique à l'objet de valeur, puis vous pouvez utiliser la même classe pour les deux - il aura un numéro de facture, des éléments commandés , prix total.

    D'autre part, un objet de domaine utilisateur aura un champ de mot de passe et un champ de messagerie, que vous souhaitez pouvoir traiter dans votre système, mais vous ne devez jamais envoyer à d'autres systèmes. Par conséquent, vous avez besoin d'un nouvel objet de valeur, qui manque ces deux champs.


0 commentaires

13
votes

typiquement un objet de valeur encapsule quelque chose qui a une valeur: devise, dates, température, etc. Ils peuvent contenir une valeur et des unités, mais ils ne sont pas complexes.

Un objet de domaine est susceptible d'être plus complexe (sauf s'il s'agit d'un objet de domaine anémique, qui est un tas de getters et de setters prétendant être un objet de domaine) car il contient une logique de domaine.

Par exemple, vous pourriez avoir un objet de domaine de facturation contenant de nombreuses lignes de facturation (une ligne pour chaque élément de facturation) et chaque ligne de facturation pourrait avoir un montant net, un montant de l'impôt et un élément de facturation. Les montants et peut-être que l'élément de facturation serait généralement des objets de valeur et seraient raisonnablement simples.

La facture elle-même pourrait être compliquée des taux d'intérêt de retard de paiement, de prendre en charge un processus d'approbation ou de prise en charge de votre système de comptabilité.

L'objet de valeur est suffisamment simple pour être réutilisable à travers différents domaines. Les objets de domaine modélisent votre domaine actuel et sont généralement écrits pour modéliser votre entreprise ou votre domaine spécifique, y compris votre logique commerciale.

La raison pour laquelle vous verrez souvent peu de différence entre eux est que de nombreux développeurs utiliseront une conception d'objet de script / transfert de données de transaction, mais appelez-le un modèle de domaine. Ils étiquetent leurs collections de getters et de régleurs "Objets de domaine".


3 commentaires

Bien sûr, je parle dans le bon sens de la conception générique. YMMV Si vous êtes dans une communauté qui utilise différentes définitions pour ces termes.


Pouvons-nous dire qu'il est faux d'appeler "Conception d'objet de transfert de données / transfert de données par" modèle de domaine ", à moins que cela ne parle de manière à ce que le modèle de domaine ne signifie qu'un" modèle "de MVC, lié à un domaine donné?


Je pense que nous devons différencier entre "modèle de domaine", qui est un modèle de conception spécifique et "modèle de domaine" ou "modèle", qui est un terme plus général. Vous pouvez modéliser votre domaine sans utiliser de modèle de domaine. Le M de MVC peut être un modèle de domaine, mais peut également être un modèle de domaine (ou modèle d'objet, etc.)



3
votes

Construire sur les réponses précédentes, je suis d'avis qu'ils sont non la même chose:

  1. Les objets de domaine peuvent contenir une logique commerciale. Ils représentent des entités dans l'espace problématique, leurs valeurs de propriété peuvent être modifiées et sont identifiées par un identifiant unique.
  2. Selon le gang de quatre, valeur de valeur sont immuables . De tels objets ne sont identifiés par aucun identifiant, mais plutôt par leur valeur.

0 commentaires