2013-07-06 53 views
1

我正在建立一個新的系統,我想爲它有一個豐富的領域。但是,我陷入了一些我想了解更多細節的細節。域驅動設計 - 我們應該在哪裏放置存儲庫?

假設我會有一個客戶類,您究竟在哪裏堅持客戶實體或聚合根?

它應該是具有持久性知識的客戶類嗎?

var myCustomer = CustomerFactory.CreateCustomer(id); 
myCustomer.Name = ... 
myCustomer.LastName = ... 

myCustomer.Save() 

在這種情況下,我需要將我的客戶存儲庫傳遞給客戶類(通過工廠或注入)。請注意,我無法在Eric Evens的DDD書中找到一個很好的例子。

另一種方式是保持客戶自由知道關於持久性的

var myCustomer = CustomerFactory.CreateCustomer(id); 
myCustomer.Name = ... 
myCustomer.LastName = ... 

CustomerRepository repository = new CustomerRepository(); 
repository.Save(myCustomer); 

此外,我想我可以有一個服務類,所有這一切在一起,就像這樣:

AddCustomerService service = new AddCustomerService(CustomerRepository repository) 
service.AddCustomer(myCustomer); 

只是一個小紙條: 如果我實際上沒有保存在客戶類中,我發現我的客戶類只不過是屬性,可能只有一點驗證,但沒有其他。沒有真正的行爲。行爲被移動到服務類或客戶端使用的存儲庫...

回答

1

我有一個DDD項目。這個順序有4層(因爲我沒有使用WCF,否則會有更多):

1. UI 
1.1 MVC4.csproj 
... (Repository Interfaces) 
... (Repository Implementations) 

2. Service Layer 
2.1 Service.cs 
...DTOs 

3. Business Layer 
3.1 DomainObjects.csproj 

4. Data Access Layer 
4.1 DAL.csproj (Entity framework 5) 
... (Repository Interfaces) 
... (Repository Implementations 
+0

是的。我知道。但是你的域對象是否有對你的倉庫的引用? – user80855

+1

不,沒有對我的域對象項目中的存儲庫的引用。 – Greg

+0

謝謝。我認爲這是一條路。 – user80855

2

後者是可取的。也就是說,在您的CustomerRepository類中編寫保存方法。在DDD中,實體應該不知道持久性邏輯。您的域實體不包含行爲並且僅包含屬性(儘管有時它們應包含兩者)是很常見的。