0

pense que oui que j'ai ce genre d'événements de domaine:Événements de domaine - L'héritage ou l'utilisation de énumérations

class BookChangedName... 
class BookType1ChangedName extends BookChangedName... 
class BookType2ChangedName extends BookChangedName... 

Est-ce mieux ou:

class BookChangedName{ 
    enum bookType = BOOK_TYPE_1; 
} 

Comme ils disent l'héritage d'utilisation que s'il y a un comportement différent entre les classes, je suppose ici que je voudrais aller avec l'échantillon enum (cas n ° 2) - puisque les événements de domaine sont simplement simples DTO simples.

Mais encore une fois, dans mon domaine, ces différents types d'événements ont des significations différentes (des chemins de traitement différents). Donc, si je l'utilise par exemple # 1 je finirais avec beaucoup de:

if(event instanceof BookType1ChangedName){ 
    //do smth in domain 
} 
else if(event instanceof BookType2ChangedName){ 
    //do smth in domain 
} 

et aussi je ne pouvais pas être aussi explicite que:

when(BookType1ChangedName event){... 

je dois faire une sorte de pré -Traitement comme:

@EventHandler(matcher_pattern = event->event.bookType==BOOK_TYPE_1) 
when(BookChangedNameevent){... 
+0

Si vos types de livre sont des agrégats différents, peuvent être avec un parent unique si vous utilisez l'héritage, vous pouvez utiliser le même événement et avoir des gestionnaires dans la classe de base. –

Répondre

0

les noms d'événements sont une partie importante en DDD (en fait une « nom » est important) donc je suggère d'utiliser différents noms d'événements pour différents événements comme les noms portent beaucoup d'informations. En outre, si vous utilisez un code de type (avec enum), vous augmentez l'index CRAP en raison des if supplémentaires.

0

Vous devriez avoir un seul événement BookChangedName et avoir une propriété BookType pour cet événement. Le gestionnaire/abonné de l'événement devrait prendre soin de la logique.

+2

Quel est le raisonnement derrière cette déclaration? – plalx

+0

Il s'agit d'événements similaires: BookChangedName, BookType1ChangedName, BookType2ChangedName, etc. Au lieu de créer des classes d'événements différentes pour chaque type de livre, laissez simplement le gestionnaire de l'événement implémenter le traitement de chaque type de livre. Le gestionnaire peut utiliser un modèle de stratégie pour ne pas avoir à gérer les instructions if/else. – alltej

2

Est-ce que les experts de votre domaine utilisent l'expression "BookType1"? Vous avez dit qu'il y a différents chemins logiques pour chaque type de livre - je suggère d'interroger le rationnel pour cela, et peut-être qu'il y a un nom plus orienté domaine pour chaque événement? Essayez d'écouter le langage utilisé par les experts du domaine pour décrire les deux situations.

Si vous pouvez trouver un langage plus descriptif, j'irais avec des événements distincts basés sur l'héritage. Avec certains mécanismes d'événement de domaine, vous pouvez vous abonner pour gérer soit la super classe abstraite, soit l'une ou l'autre des spécialisations, ce qui peut être utile si vous voulez cette flexibilité.

D'autre part, si elle est vraiment juste booktype1 et booktype2 et je considère que dans le futur booktype3 peut-être et booktype4, que ce soit un ENUM ou même simplement un entier et envisager d'appliquer les différents chemins logiques dans différentes stratégies et demandez à votre gestionnaire d'événement de domaine d'utiliser une factory pour renvoyer la stratégie appropriée pour le type de livre donné, puis de déléguer à la stratégie pour exécuter la logique.