La principale raison de ces limites est la séparation des préoccupations . Le code qui accède au magasin de données ne devrait avoir à se soucier que d'accéder au magasin de données. Il ne devrait pas être responsable de l'application des règles sur les données. En outre, l'interface utilisateur doit être responsable de la mise à jour des contrôles dans l'interface utilisateur, de la récupération des valeurs de l'entrée utilisateur et de leur traduction en un élément pouvant être utilisé par la couche de domaine, sans plus. Il doit appeler les opérations fournies par la couche de domaine pour effectuer les actions nécessaires (par exemple, enregistrer ce fichier). Un service Web appelé doit être chargé de la conversion du support de transmission en un élément que la couche de domaine peut utiliser, puis d'appeler la couche de domaine (la plupart des outils effectuent une grande partie de ce travail pour vous).
Cette séparation, lorsqu'elle est correctement implémentée, peut vous permettre de modifier certaines parties de votre code sans en affecter les autres. Par exemple, l'ordre de tri d'une collection d'objets renvoyée doit peut-être être modifié. Comme vous savez que la couche responsable de la manipulation des données (généralement la couche de logique métier) gère ce genre de choses, vous pouvez facilement identifier où le code doit être modifié. En plus de ne pas avoir à modifier la façon dont il est récupéré à partir du magasin de données, ou l'une des applications utilisant le domaine (l'interface utilisateur et le service Web de mon exemple ci-dessus).
Le but ultime est de rendre votre code aussi facile à gérer que possible.
Il est à noter que certaines choses ne peuvent pas être classées dans une couche spécifique du domaine (par exemple, la journalisation, la validation et l'autorisation). Ces éléments sont généralement qualifiés de problèmes transversaux et peuvent, dans certains cas, être traités comme une couche autonome que toutes les autres couches peuvent voir et utiliser.
Personnellement, je pense que l'approche par couches est obsolète et que l'approche par service est meilleure. Vous avez toujours la ligne tranchée sur qui fait quoi, mais cela ne vous oblige pas à être aussi hiérarchique. Par exemple, un service de bons de commande, de facturation et d’expédition, du point de vue de l’application, tous ces services représentent votre domaine, et le report de responsabilité que je viens de décrire est toujours valable dans ce contexte, il vient d’être modifié. que votre domaine existe à plusieurs endroits, en utilisant davantage le concept de séparation des préoccupations.