Bonjour, je suis en train de concevoir une application en Java, pour laquelle j'ai décidé (aucune contrainte là dessus) d'utiliser une architecture 3-Tier. Mais j'ai quelques problèmes au niveau de la couche DAO (et surtout de différencier ce qui est dans la couche DAO et ce qui est dans ma couche métier). Voici comment j'ai procédé :
Ma couche métier contient les objets métiers (par exemple un utilisateur (son nom, mot de pase, id, des getters et des setters (mais pas sur tous les
attributs) et les services métiers (par exemple les services liés à l'utilisateur, tels que authentifier un utilisateur).
Afin de rendre indépendant ces objets de la manière de stocker des données, j'ai créé des "usines" (une par type d'objet metier) dans la couche d'accès aux données. Celles-ci sont chargées de créer les nouveaux objets, de les instancier à partir de la base de données, ... (j'ai essayé de m'inspirer des EJB, que je ne peux pas utiliser faute de serveur adequat).
Ces usines présentent toutes une structure similaire avec :
une fonction pour créer un objet metier
une fonction pour le supprimer
une fonction pour le stocker dans la base
des finders, à partir de divers paramètres (Clé primaire, ou autre champ)
J'en arrive donc à me poser la question de créer une interface Factory avec ces fonctions. Cependant, pour créer un utilisateur, il me faut un nom et un mot de passe, mais pour créer un produit, il me faut un nom, un prix et une description.
Dois-je créer deux interfaces, du style :
BusinessObjectIfc
+String getPrimary Key()
+java.util.Properties getOtherFields()
+void setParam(String,Object)
FactoryIfc
+BusinessObjectIfc create(Properties)
+void delete(BusinessObjectIfc)
+void update(Entity)
+BusinessObjectIfc findByPrimaryKey(String)
+Collection findByOtherField(Properties)
De mon point de vue, ce système enlève de la lisibilité étant donné que l'on ne saura pas par exemple que dans l'utilisateur,on peut acceder au nom d'utilisateur qui se situera à l'index "user" de l'object Properties renvoyé par getOtherFields, mais il me parrait plus logique de regrouper ces objets
présentant des structures similaires.
Mais d'un autre côté, quand je regarde les EJB, je constate que chacun possède sa propre interface avec ses fonctions create, ... et ses fonctions métier.
Je me demandais donc quelle solution choisir (je penche plutôt pour la solution se rapprochant le plus des EJB, avec pas d'interface et pour chaque "usine" ses fonctions, mais étant donné mes compétences ...), et s'il n'existait pas (sait-on jamais) une méthode en JAVA pour définir, en dehors de la doc, que tels et tels objets présentent tous une structure similaire ...
Pourriez vous m'aider à éclairer ma lanterne (j'aimerais bien éviter les solutions dans le genre Spring+Hibernate et faire ça à la main une première fois histoire de comprendre un bon coup ...)
Par avance merci de votre réponse
Message édité par Titelf le 03-07-2006 à 17:38:25