2013-02-05 133 views
2

如何在使用DAO模式時處理多對多的關係? DAO負責使用3-rd鏈接表連接兩個實體嗎?例如,我有兩個實體:CustomerProductDAO。多對多關係

,我需要提供類似的方法:要求使用3擋表作爲鏈接表

public void assignCustomerToProduct(...); 
public List<Product> getSelledProducts(long customerId); 

此方法。 是CustomerDao負責提供這種方法嗎?或者將這些方法排除在服務層上更好?

+0

順便說一句,我們沒有英文的「Selled」。也許,你的意思是「已售出」;) –

回答

1

其中一個對象應該擁有這種關係。因此,例如,只有在保存員工時才能保存職位。

如果你這樣做,那麼員工就像一個聚合根(如果你正在談論DDD存儲庫)成爲一個(一點)。然後,存儲庫負責根據需要創建位置,並在鏈接表中插入多對多條目。

如果Position是一個聚合根本身,那麼EmployeeRepository只負責更新鏈接表,但不負責持續的位置。

+0

對不起,我沒有使用任何Repository模式。有人編輯我的問題並添加了'repository-pattern'標籤。實際上,我使用_only_ DAO模式,甚至更多我不知道什麼是Repository模式以及如何使用它。我的問題符合DAO模式。或更特別 - GenericDAO。附:我使用JDBC。 ...如果你可以提供存儲庫模式優於DAO的一些優點,爲什麼我更好地使用Repository而不是DAO我準備好更改我的代碼:) – MyTitle

+0

它們非常相似,但是Repository與Domain Driven Design(DDD)一起使用,它對於它應該做什麼有一些限制。我認爲我上面寫的大部分內容仍然適用。因此,例如,您的EmployeeDAO可以負責將員工和行存儲在員工和職位之間的鏈接表中。有一個真正的雙向關係,其中存儲將持續的東西鏈接表是很多工作,可能不值得。 – Augusto

+0

'如果Position是一個聚合根本身,那麼EmployeeRepository只負責更新鏈接表,但不負責持續位置。因此,在'EmployyDAO'中提到像我提到的方法並不壞? – MyTitle