Java EE-Quelle est la couche correcte pour formater les objets du modèle de domaine avant de les transmettre aux vues?


Je développe une application Web qui a une architecture en couches typique:

Une couche DAO qui récupère des objets de modèle de domaine à partir d'une base de données;

Cette couche communique avec la couche de service qui effectue certaines opérations commerciales à l'aide de ces objets;

La couche web (Spring Controllers) utilise la couche service pour récupérer les objets du modèle de domaine (ou les collections pour eux) et les transmettre à la couche view;

La couche de vue est soit de simples JSPS qui afficher les données à l'aide de JSTL, ou JSPS qui récupèrent certaines des données via AJAX sous la forme d'objets JSON (objets de domaine convertis en JSON via la bibliothèque Jackson).

J'ai fait des recherches sur ce qui suit:

Très souvent, j'ai besoin de convertir les champs db dans un format différent pour les montrer à l'utilisateur. Par exemple, une date peut être stockée en tant qu'horodatage et je veux qu'elle l'affiche en tant que date formatée (par exemple jj/mm/aaaa).

Aussi, je dois faire le contraire, convertir une valeur (généralement entrée utilisateur) au format de la propriété d'un objet modèle de domaine.

Ma question est, où devrais-je faire ce genre de conversions? Surtout avec les données JSON, elles devraient déjà être formatées sur la réponse AJAX, je ne pense pas que je devrais le formater avec Javascript, ai-je raison?

Merci d'avance.

Author: BalusC, 2011-07-14

1 answers

Très souvent, j'ai besoin de convertir les champs db dans un format différent pour afficher à l'utilisateur. Par exemple, une date peut être stockée en tant qu'horodatage et je veux qu'il le montre comme une date formatée (par exemple jj/mm/aaaa).

Aussi, je dois faire le contraire, convertir une valeur (généralement utilisateur entrée) au format de la propriété d'un objet modèle de domaine.

Ma question est, où devrais-je faire ce genre de conversions?

Mon opinion est que tous les formats de données les conversions doivent être effectuées dans la vue ou dans des objets collaboratifs. Le modèle ou la couche de service ne doit pas effectuer cette activité. Ce serait une mauvaise conception d'effectuer cela dans le modèle, car cela couplerait les interfaces exposées par le modèle à une seule vue. En outre, il serait plus difficile d'apporter des modifications à la vue, nécessitant également des modifications dans votre modèle.

Vous pouvez vous référer à des applications JSF bien écrites (puisque vous avez mentionné que vous utilisez Java EE), où des convertisseurs spécifiques sont écrits pour s'assurer que la vue formaterait le contenu des objets de domaine de manière appropriée.

En particulier avec les données JSON, elles devraient déjà être formatées sur la réponse AJAX, je ne pense pas que je devrais le formater avec Javascript, ai-je raison?

Cela dépend de la façon dont vous affichez la vue. Si votre représentation de la vue est que le serveur doit fournir au client des données formatées, le serveur doit le faire. Mais, la plupart des applications adoptez l'approche pratique où la logique côté client est également traitée dans le cadre de la vue. Selon le contexte dans lequel les données sont utilisées, vous pouvez:

  • soit formater les données sur le serveur, surtout si les données formatées sont utilisées universellement côté client sans aucune autre modification.
  • ou, transmettre des données au client sous une forme canonique, qui est ensuite formatée sur le contexte dans lequel les données utilisées et/ou sont affichées à l'utilisateur.
 2
Author: Vineet Reynolds, 2011-07-14 01:21:47