2016-12-11 5 views
1

J'ai StatutDDD: status - Valeur Objet ou Entité?

public final class Status { 

     private int code; 

     public Status(int code) { 
      this.code = code; 
     } 

     public int getCode() { 
      return code; 
     } 
    } 

Il semble que l'état peut être la valeur objet parce que deux statuts avec le code même sont les mêmes statuts, mais le statut peut être ajouté par les administrateurs, une liste des statuts doit être affiché dans l'interface utilisateur;

Fournir la liste des statuts avec leurs noms dans l'interface utilisateur, je classe wrapper supplémentaire

public final class AvailableStatuses { 
    private Status status; 
    private String name; 

    ... 
} 

public AvailableStatusesRepository { 
    ... 
} 

Que pensez-vous de cette conception? Dois-je l'ajuster et créer un champ Status as Entity et mettre un champ Name?

+0

Je ne comprends pas votre classe 'Currency'. Exemple: Qu'est-ce que la monnaie 124? Ou sont les codes ISO des valeurs de code, où 124 est le dollar canadien («CAD»)? Si oui, pourquoi avoir séparé 'Currency' et' AvailableCurrency'? Pourquoi ne pas simplement avoir l'entité 'Currency' avec ID interne, numéro ISO, code ISO et description, maintenable via l'interface utilisateur? – Andreas

+0

le code est une représentation interne des monnaies, 1 - USD, 2-EUR, etc .. pour cela j'utilise le wrapper AvailableCurrency. – Teimuraz

+0

@Andreas, j'ai changé un peu la question, au lieu de la monnaie, j'ai changé de concept à Status, je pense que cela reflétera plus clairement ma confusion. – Teimuraz

Répondre

0

Cela devrait être un objet de valeur car il est utilisé comme descripteur pour les éléments de votre modèle. Ils sont définis par leurs attributs et leurs attributs (statut) déterminent leur identité.

+0

merci pour la réponse. Alors est-ce que j'ai encapsulé l'objet Status dans AvaliableStatus et utilisé le référentiel comme dans mon exemple? (J'ai besoin de fournir la liste des statuts dans l'interface utilisateur, permettre à l'administrateur de gérer la liste des statuts, etc.). – Teimuraz

+0

Votre constructeur d'état peut-il prendre le code entier et le nom de la chaîne? – alltej

+0

oui, mais pour quoi faire? – Teimuraz

2

La réponse simple avec votre conception actuelle serait que AvailableStatus est une entité en Status est un objet de valeur (VO) qui est essentiellement une enveloppe pour une identité de AvailableStatus (il est de code). Votre modèle est probablement très bien tel quel, mais une chose que vous devez réaliser est que vous avez été forcé de trouver des noms différents, l'un pour décrire l'entité et l'autre pour décrire la VO. C'est parce que vous manquez peut-être de bons contextes bornés (BC). Vous pourriez avoir une maintenance/administration/settings BC où Status serait une entité alors que ce serait une VO dans n'importe quel contexte en aval.

0

L'état est un objet de valeur et doit inclure le nom et pas seulement l'ID. Les deux champs sont immuables dans le contexte d'utilisation (c'est-à-dire qu'aucun élément qui a un champ Statut ne peut changer un objet Statut). La classe wrapper est inutile.

Dans le cadre de votre application Admin, statut peut être traité comme une entité, avec la mise en garde que l'ID une fois attribué ne peut être modifiée (ce qui est une exigence inhabituelle pour une entité avec une clé d'identification synthétique)