J'ai une classe Contact qui contient un objet PortalAccount. Lorsque je souhaite créer un "compte portail" pour un contact, un compte est créé à distance sur une application de portail à l'aide de soap/axis, puis le compte portail du contact est renseigné et le contact est enregistré (la base de données locale contient des informations sur le compte distant, identifiant d'utilisateur et nom d'utilisateur, etc.). J'ai donc une classe de service PortalServiceImpl qui a des méthodes pour créer réellement un utilisateur sur un portail distant, étant donné une instance de Contact. Compte tenu de toutes ces informations, ma question est la suivante: si PortalServiceImpl obtient une instance d'un objet ContactDAO et effectue la sauvegarde, ou si la classe PortalServiceImpl crée simplement l'utilisateur distant, modifiez l'objet Contact transmis, et laisser le client être responsable de l'épargne?Est-ce que plusieurs objets de couche de service doivent partager un DAO?
Méthode 1:
class ServiceFacadeImpl {
public void createPortalAccount(Contact contact) {
// here the contact is implicitly saved
this.portalService.createPortalAccount(contact);
}
}
Méthode 2:
class ServiceFacadeImpl {
public void createPortalAccount(Contact contact) {
// here contact is implicitly modified
this.portalService.createPortalAccount(contact);
this.contactDAO.save(contact);
}
}
Les deux méthodes se sentent mal pour moi. La méthode 1 est incorrecte car le service PortalService crée un utilisateur distant ET enregistre le contact dans la base de données (bien que via une interface DAO). Méthode 2 se sent mal parce que je dois supposer que le PortalService modifie le contact que je lui passe. J'ai également le sentiment que je ne vois pas d'autres pièges, comme potentiellement ne pas gérer les transactions de manière cohérente.
(BTW, je l'ai déjà utilisé les deux méthodes, et ne veux pas continuer refactoring dans un cercle sans fin. Quelque chose semble tout simplement faux ici.)
Expliquez mieux ce qu'est "portail", pourquoi créez-vous PortalAccount à distance (que se passe-t-il lorsque vous le créez), et pourquoi le sauvegardez-vous dès sa création? – nightcoder
PortalAccount est un objet de domaine local qui contient des informations sur le compte d'un contact sur un portail externe. L'objet PortalAccount n'est pas créé à distance. Toutefois, le PortalService que je décris crée en réalité un compte d'utilisateur sur le portail distant, puis crée et remplit la référence portalAccount d'un contact. Donc, contact.getPortalAccount.getId() retournera l'identifiant de l'utilisateur du contact sur le portail distant (mais il ne frappe pas réellement le portail distant, car cette information est stockée dans la base de données locale). – Boden