Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
864 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Séparer la couche d'accès aux données : TransfertObject

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Séparer la couche d'accès aux données : TransfertObject

n°1551829
Djebel1
Nul professionnel
Posté le 01-05-2007 à 15:07:58  profilanswer
 

Salut,  
 
dans mon application j'ai voulu séparer la couche d'accès aux données de la couche métier (étonnant non ?!). Et je tombe là dessus : http://java.sun.com/blueprints/cor [...] bject.html
 
Ma question porte sur le TransfertObject. Mon application respecte le schéma décrit dans la page mise en lien (DAO, abstract factory, ...), sauf pour le TransfertObject. En effet, je trouvais ça extrêment redondant d'avoir un TransfertObject qui aurait quasiment les mêmes attributs que l'objet de la couche métier qui serait instancié en l'utilisant.
 
A la place, ma couche d'accès aux données retourne un HashMap<String, Object> où String peut être le nom du champ dans la base, ou un nom de remplacement si on veut, et Object est la valeur de ce champ. C'est ensuite les loaders de la couche métier qui cast cet Object dans le type attendu.
 
Est-ce que ça tient la route ? C'est crado ? Vous faîtes comment vous ?

mood
Publicité
Posté le 01-05-2007 à 15:07:58  profilanswer
 

n°1551918
jbourdello​n
Posté le 01-05-2007 à 19:45:29  profilanswer
 

c'est ce que l'on appele des beans , des objets métiers mappant bien souvant une table de la base, par exemple une commande, une ligne de commande, une facture , un utilisateur , etc...
 
Donc oui c'est plus propre que le cast que tu utilises mais non ce n'est pas obligatoire, c'est juste des bonnes pratiques....
 
Perso , moi c'est la méthode que j'emploi au boulot et pour mes devs persos, je prefere...

n°1552258
Djebel1
Nul professionnel
Posté le 02-05-2007 à 13:02:43  profilanswer
 

Donc si j'ai une classe de la couche métier genre Customer :  

Code :
  1. public class Customer
  2. {
  3.     public String firstName;
  4.     public String lastName;
  5.     public int customerId;
  6.     ...
  7. }


 
il faut que je mette en place un bean comme ça ?

Code :
  1. public class CustomerBeans
  2. {
  3.     public String firstName;
  4.     public String lastName;
  5.     public int customerId;
  6.     ...
  7. }


 
C'est bien ça ou j'ai mal compris ? Parce que c'est ultra redondant quand même ^^

n°1552560
jbourdello​n
Posté le 02-05-2007 à 19:25:41  profilanswer
 

Ah non si tu as déja ta classe Customer c'est bon,  
par contre la haspmap dont tu as parlé dans ton premier message la c'est moins bien ;)

n°1553095
Djebel1
Nul professionnel
Posté le 03-05-2007 à 12:52:05  profilanswer
 

Hmm pourtant, je pensais que les DAO n'avaient pas à connaître la couche métier, ils ne peuvent donc pas utiliser la classe Customer non ?
 
Et quand je regarde sur la page sun ( http://java.sun.com/blueprints/cor [...] bject.html ), le TransfertObject ressemble fortement à une classe reprenant les attributs de la classe de la couche métier. Je copie colle leur exemple de code :  
 
Example 8.3 Implementing the Transfer Object Pattern - Transfer Object Class

Code :
  1. // Transfer Object to hold the details for Project
  2. public class ProjectTO implements java.io.Serializable {
  3.     public String projectId;
  4.     public String projectName;
  5.     public String managerId;
  6.     public String customerId;
  7.     public Date startDate;
  8.     public Date endDate;
  9.     public boolean started;
  10.     public boolean completed;
  11.     public boolean accepted;
  12.     public Date acceptedDate;
  13.     public String projectDescription;
  14.     public String projectStatus;
  15.     // Transfer Object constructors...
  16. }


 
 
Example 8.4 Implementing the Transfer Object Pattern - Entity Bean Class

Code :
  1. public class ProjectEntity implements EntityBean {
  2.     private EntityContext context;
  3.     public String projectId;
  4.     public String projectName;
  5.     public String managerId;
  6.     public String customerId;
  7.     public Date startDate;
  8.     public Date endDate;
  9.     public boolean started;
  10.     public boolean completed;
  11.     public boolean accepted;
  12.     public Date acceptedDate;
  13.     public String projectDescription;
  14.     public String projectStatus;
  15.     private boolean closed;
  16.     // other attributes...
  17.     private ArrayList commitments;
  18.     ...
  19.     // Method to get Transfer Object for Project data
  20.     public ProjectTO getProjectData() {
  21.       return createProjectTO();
  22.     }
  23.     // method to create a new Transfer Object and  
  24.     // copy data from entity bean into the value  
  25.     // object
  26.     private ProjectTO createProjectTO() {
  27.         ProjectTO proj = new ProjectTO();
  28.         proj.projectId = projectId;
  29.         proj.projectName = projectName;
  30.         proj.managerId = managerId;
  31.         proj.startDate = startDate;
  32.         proj.endDate = endDate;
  33.         proj.customerId = customerId;
  34.         proj.projectDescription = projectDescription;
  35.         proj.projectStatus = projectStatus;
  36.         proj.started = started;
  37.         proj.completed = completed;
  38.         proj.accepted = accepted;
  39.         proj.closed = closed;
  40.         return proj;
  41.     }
  42.     ...
  43. }


 
Donc ... je fais quoi moi ? :D Les DAO peuvent accéder à la couche métier, ou faut surtout pas et on utilise un TransfertObject redondant ?

n°1555081
prettysmil​e
Sourire est un devoir social
Posté le 03-05-2007 à 21:57:48  profilanswer
 

Pour ma part:
Mon DAO ne connait pas la couche métier dans la mesure où il ne gère pas de métier, par contre il me sert à remplir de objets métiers (ou des collections d'objet).
 
C'est ma couche de service qui va gérer les appels DAO et orchestrer les actions sur les objets métiers . Cette même couche transformera les bean métier en transfert object pour les communiquer à une couche facade qui les transferera ensuite vers la couche de présentation.
 
Le transfert object n'est pas nécessairement une recopie du bean métier, il est plus orienté présentation et contient les champs que je souhaite afficher (qui ont pu subir un traitement comme une mise en forme de date)  
 
 
 [:prettysmile]

n°1555085
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-05-2007 à 22:02:53  profilanswer
 

prettysmile a écrit :

Pour ma part:
Mon DAO ne connait pas la couche métier dans la mesure où il ne gère pas de métier, par contre il me sert à remplir de objets métiers (ou des collections d'objet).
 
C'est ma couche de service qui va gérer les appels DAO et orchestrer les actions sur les objets métiers . Cette même couche transformera les bean métier en transfert object pour les communiquer à une couche facade qui les transferera ensuite vers la couche de présentation.
 
Le transfert object n'est pas nécessairement une recopie du bean métier, il est plus orienté présentation et contient les champs que je souhaite afficher (qui ont pu subir un traitement comme une mise en forme de date)  
 
 
 [:prettysmile]


saluuuuuttt !!!!! [:prettysmile] [:prettysmile] [:prettysmile]
ça boume ? [:cupra]


Message édité par Harkonnen le 03-05-2007 à 22:03:10

---------------
J'ai un string dans l'array (Paris Hilton)
n°1555088
prettysmil​e
Sourire est un devoir social
Posté le 03-05-2007 à 22:05:59  profilanswer
 

hello!!
 
pas mal, oui.
 
y a un moment que je n etais pas passée dans le coin, l'ambiance à l'air d'être toujours bonne, et j 'ai reconnu quelques pseudo, il est donc possible de vieillir sur ce forum!

n°1555093
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-05-2007 à 22:22:05  profilanswer
 

ouais.... certains d'entre nous ont "fété" leurs 7 ans d'inscription en février... :sweat:

n°1555124
Djebel1
Nul professionnel
Posté le 04-05-2007 à 02:39:01  profilanswer
 

prettysmile a écrit :

Pour ma part:
Mon DAO ne connait pas la couche métier dans la mesure où il ne gère pas de métier, par contre il me sert à remplir de objets métiers (ou des collections d'objet).


Si le DAO remplit des objets métiers, on peut dire qu'il connaît la couche métier non ? ^^ Donc ça c'est acceptable pas de souci ?
 

prettysmile a écrit :


C'est ma couche de service qui va gérer les appels DAO et orchestrer les actions sur les objets métiers . Cette même couche transformera les bean métier en transfert object pour les communiquer à une couche facade qui les transferera ensuite vers la couche de présentation.


Hmm ça voudrait dire que je fais encore de la merde dans mon design ?  :whistle: Je développe en MVC, le controller lance des actions sur le model, et transmet les objets de la couche métier directement à la vue pour affichage. Ca se fait pas en java de transmettre des objets de la couche métier à la vue ? :D
 

prettysmile a écrit :


Le transfert object n'est pas nécessairement une recopie du bean métier, il est plus orienté présentation et contient les champs que je souhaite afficher (qui ont pu subir un traitement comme une mise en forme de date)


oki bon au moins ça confirme ce que je pensais du Transfer Object : très proche de ta classe métier au niveau des attributs, mais avec seulement ce qui t'intéresse.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Séparer la couche d'accès aux données : TransfertObject

 

Sujets relatifs
Access 2000 ajoute données partielleAccès fichier sur serveur distant
Prob : Type de données VB6 et SQL ServerMysql - Compression de données texte / index fulltext ?
Mettre en route une base de données Mysql svpPocket PC et accès base de données distante
Idée droit d'accésMettre en tableau des données entrelacées
problème controle d'accès avec cookie 
Plus de sujets relatifs à : Séparer la couche d'accès aux données : TransfertObject


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR