2012-04-18 44 views
7

我目前正在創建一個存儲庫並想知道實體刪除操作的「最佳實踐」是什麼。在下面的選項中,品牌和型號構成了Car實體的關鍵。存儲庫是否應通過傳入一個ID或實體本身來刪除/刪除一個實體

選項1:

deleteCar(Car car) 

選項2:

deleteCar(String make, String model) 

選項3:

deleteCar(CarKey carKey) 

剛開始以爲選項1,但在實踐中,選項2似乎更具吸引力(我不想在只有id的情況下獲取對象,以便將其傳遞給delete方法)。因爲我看過類似的東西,所以我提出了選項3,但這對我來說並不合適,因爲CarKey不是一個真正的域對象。

想法?

+2

只是想說,option2可能會刪除不同的汽車,因爲實體是由身份而不是它的價值定義。 – 2012-05-03 09:26:37

+0

是的。我想到這並不重要,因爲我正在考慮它的方式,這是主要關鍵。但是,如果不是,我可以看到。 – testing123 2012-05-08 20:42:01

回答

4

選項3

這不要緊,CarKey不是域對象(也可以是雖然值對象),一個id是所有你需要的是行動發生。這是因爲,如果Car是AR,存儲庫應該知道如何GetIt以及如何處理刪除操作。

3

如果嚴格遵守DDD中repository的定義,則選擇1是一種方式,因爲存儲庫模仿內存中的集合。但是,我不認爲這是存儲庫的重要組成部分,如果過分,可能導致抽象漏洞。另一方面,要求實體對象完全刪除可以表示存儲庫的調用者(例如應用服務)應該首先檢索由ID刪除的實體,解決任何商業問題,並且它們移除它。像Hibernate這樣的ORM可以通過查詢來刪除,這樣你只需要ID就可以調用一個刪除,但是最終它會從數據庫加載實體。