我有一個包含一個PortalAccount對象的Contact類。當我想爲聯繫人創建一個「門戶帳戶」時,會使用soap/axis在門戶應用程序上遠程創建一個帳戶,然後填充聯繫人的portalAccount並保存聯繫人(本地數據庫保存遠程帳戶的相關信息,例如用戶名和用戶名等)。多個服務層對象應該共享一個DAO嗎?
因此,我有一個服務類PortalServiceImpl,它具有在給定Contact實例的情況下在遠程門戶上實際創建用戶的方法。
鑑於所有這些信息,我的問題是:如果PortalServiceImpl獲取ContactDAO對象的實例並實際執行保存操作,或者PortalServiceImpl類應創建遠程用戶,修改傳入的Contact對象,並且讓客戶負責保存?
方法1:
class ServiceFacadeImpl {
public void createPortalAccount(Contact contact) {
// here the contact is implicitly saved
this.portalService.createPortalAccount(contact);
}
}
方法2:
class ServiceFacadeImpl {
public void createPortalAccount(Contact contact) {
// here contact is implicitly modified
this.portalService.createPortalAccount(contact);
this.contactDAO.save(contact);
}
}
這兩種方法都覺得我錯了。方法1感覺不對,因爲PortalService正在創建遠程用戶並將聯繫人保存到數據庫(儘管通過DAO接口)。方法2感覺不對,因爲我必須假定PortalService正在修改我傳遞給它的聯繫人。
我也有一種感覺,我沒有看到其他一些陷阱,像潛在的不一致處理交易。
(順便說一句,我已經使用這兩種方法,並且不希望繼續在無盡的循環重構。事情似乎只是錯在這裏。)
請更好地解釋什麼是「門戶」,爲什麼遠程創建PortalAccount(創建它時發生了什麼),以及爲什麼一旦創建它就保存它? – nightcoder 2009-05-22 23:07:49
PortalAccount是一個本地域對象,用於保存關於外部門戶上聯繫人帳戶的信息。 PortalAccount對象不是遠程創建的。但是,我所描述的PortalService實際上是在遠程門戶上創建一個用戶帳戶,然後創建並填充Contact的portalAccount引用。 因此,contact.getPortalAccount.getId()將在遠程門戶上返回一個聯繫人的用戶ID(但它實際上並未打到遠程門戶,因爲此信息存儲在本地數據庫中)。 – Boden 2009-05-22 23:40:22