Bonjour à tous,
Cela fait maintenant un petit moment que je programme en Java et j'aimerais confronter vos idées à propos d'un possible "best practice" dans le cadre de la conception d'une application de type CRUD, et, plus particulièrement, de la pertinence de l'utilisation du pattern DTO.
Je souhaiterais exposer différentes architectures et je vous propose de choisir le modèle que vous préfèrerez. Je rappelle que les architectures fictives sont développées avec les dernières API J2EE6 (JPA2, JSF2, EJB3, etc.).
On peut prendre un MCD témoin ultra simple:
Forum n --- 1 Topic
Topic n --- 1 Message
Message 1 --- n Utilisateur
Architecture 1:
Couche persistance EJB avec entités JPA et leurs DAO (facade remote).
La couche présentation accède aux session bean et utilise les entités JPA comme modèles de données.
Architecture 2:
Couche persistance EJB avec entités JPA et leurs DAO (facade local)
Couche service EJB dont laquelle on y injecte les DAO. Cette couche est quasiment comme un proxy car on utilise les mêmes entités JPA. Cela permettrait d'ajouter quelques traitements métier et DTO si besoin est.
Exemple: je veux afficher la liste des forums et leur nombre total de messages correspondant.
Au lieu d'envoyer la totalité des entités et relations avec les forums; on crée un DTO ForumTO contenant l'id d'un forum, son nom et le nombre de messages. Ce DTO serait généré par la couche de service en s'appuyant sur les DAO.
La couche présentation utilise donc à la fois des entités JPA et des POJO.
Architecture 3:
Couche persistance EJB avec entités JPA et leurs DAO (facade local)
Couche service (façade remote) avec DTO où chaque entité JPA à son ou ses DTO associés.
Le client n'accède plus du tout aux DAO mais à la couche service. Il ne récupère donc plus du tout d'entités JPA mais uniquement des POJO.
Qu'auriez vous pris comme architecture dans le cas d'un développement de web services:
- ajout d'annotations JAX aux entités JPA afin d'avoir pour un même objet Java la possibilité de le manager par JPA et le "marshmaller" par JAX.
- ajout d'annotations JAX aux DTO (dans le cas de l'architecture 3).
- création d'une nouvelle couche utilisant des modèle de données JAX.
Qu'auriez vous pris comme architecture dans le cas des problématiques suivantes:
- client Swing accèdant au serveur via RMI
- client JSF fonctionnant grâce aux injections
- client PHP fonctionnant grâce aux webservices
Si je n'ai pas été très clair veuillez m'en excuser. J'ai un projet personnel assez fatiguant en J2EE sur lequel je travaille, d'où ces questions existentielles!
Bon week end à tous
Partager