ADM est un bon modèle pour une solution de services distribués tels que des microservices. Il convient à de nombreuses analyses de rentabilisation basées sur le Web d'aujourd'hui.
Considérez si nous avons un objet Order Domain. Avec une approche POO, nous ajouterions Order.Purchase () Order.Cancel () etc. Cela fonctionnerait bien dans une application de bureau, où nous conservons des commandes en mémoire et faisons plusieurs choses dans la même instance.
Mais si nous avons un système distribué, avec des programmes qui ne servent qu’à une chose, c.-à-d. Accéder à une liste de commandes et les acheter à tour de rôle, ou obtenir une liste de commandes et les annuler à tour de rôle, alors avoir les deux méthodes sur le même objet ne fait aucun sens. Il faudrait avoir deux domaines ou contextes délimités:
PurchaseSystemOrder.Purchase()
et
CancelSystemOrder.Cancel();
La seule chose que ces objets partageraient serait la structure de données des propriétés.
À mesure que vous ajoutez de plus en plus de microservices, vous vous retrouvez avec des dizaines de types de commandes. Il n'est plus logique de parler d' un ordre en tant qu'objet domaine, même s'il s'agit du même ordre conceptuel qui est traité par tous ces systèmes.
Il est beaucoup plus logique d'avoir un modèle anémique, Order, qui n'encapsule que les données et de renommer vos services en conséquence:
PurchaseService.Purchase(Order order)
Maintenant, nous pouvons à nouveau parler d'Ordre et nous pouvons ajouter tous les nouveaux services que nous pensons pour traiter, sans affecter les autres services actuellement déployés.
Fowler and Co sont issus d'un système monolithique, dans leur monde, une approche ADM signifierait une seule application avec tous ces services séparés instanciés en mémoire et le OrderDTO transmis et muté. Ce serait bien pire que de mettre les méthodes sur un modèle d'Ordre riche.
Mais dans un système distribué, il existe de nombreux programmes, chacun ne nécessite qu'une seule méthode Order et l'exécute sur plusieurs commandes, en chargeant chacun, en exécutant la méthode puis en la rejetant. Il ne nécessite qu'un seul service et un flux d'objets de données.
Remplir complètement un modèle riche, s'inquiéter des exigences et des dépendances de toutes les méthodes pour n'en appeler qu'un seul puis rejeter l'objet presque immédiatement est inutile.
De plus, la modification d'une seule des méthodes nécessiterait la mise à jour de tous les composants distribués car ils dépendent tous du modèle riche pour leur logique.
Je n'ai pas de place dans mes bases de code pour des trucs dont ils n'ont pas besoin