Supposons que je crée une application Web client (dans Spring Boot 2), qui expose également les points de terminaison de repos. Je modélise mon application en 3 couches.
a) UI - CustomerDTO
b) REST - CustomerRESTResponse
/CustomerRESTRequest
Service - CustomerDTO
Données - Customer
(Entité)
Chaque couche doit-elle avoir sa propre représentation d'objet métier? Si l'entité est presque la même que le DTO, alors à quoi ça sert?
Il n'y a pas de réponse "correcte" ici. Il s'agit vraiment de trouver les compromis qui vous conviennent.
Le partage d'un modèle entre plusieurs couches échange le couplage pour la vitesse de développement. Cela vous permettra de faire fonctionner votre code plus rapidement, mais il couple intrinsèquement toutes vos couches. Une modification du modèle dans la couche Service affectera les modèles que le consommateur d'API voit.
D'un autre côté, avoir des modèles dédiés pour chaque couche augmente le temps de développement, mais dissocie vos couches. Si vous modifiez un modèle dans la couche Service, il ne se répercute pas automatiquement sur les autres couches. Cela réduit le risque de casser par inadvertance des éléments dans d'autres couches ou de divulguer par inadvertance des informations inutiles aux consommateurs d'API ou à la base de données.
L'inconvénient ici est, comme mentionné précédemment, le coût de développement initial supplémentaire, ainsi que le coût supplémentaire requis lorsque le modèle change réellement doit s'appliquer à d'autres couches.
Donc, vous échangez entre un couplage lâche et la vitesse de développement.
Chaque couche doit-elle avoir sa propre représentation d'objet métier?
Non, il n'a pas besoin de pour.
Si vous appréciez la vitesse de développement par rapport aux coûts de maintenance, le partage d'un modèle entre plusieurs couches est un bon choix.
En revanche, la plupart des coûts du projet logiciel sont dans les phases de maintenance. Ainsi, organiser votre code pour faciliter la maintenance pourrait vous faire gagner du temps/de l'argent à long terme.
Est-ce que chaque couche a sa propre représentation d'objet métier?
La réponse dépend vraiment de ce que vous optimisez.