2009-10-04 82 views
3

我讀過blog about DDD from Matt PettersDDD庫和工廠

,並根據它就在那裏說,我們爲每個實體存儲庫(接口),之後我們創建了要給實例一RepositoryFactory(聲明作爲接口)存儲庫

這是如何使用DDD完成項目的?

我的意思是,我看到了,我認爲他們使用DDD的項目,但他們被直接調用每一個倉庫,沒有工廠參與

爲什麼我們需要創建這麼多的資源庫類,爲什麼不使用像

public interface IRepository : IDisposable 
{ 
T[] GetAll(); 
T[] GetAll(Expression<Func> filter); 
T GetSingle(Expression<Func> filter); 
T GetSingle(Expression<Func> filter, List<Expression<Func>> subSelectors); 
void Delete(T entity); 
void Add(T entity); 
int SaveChanges(); 
} 

我想這可能是違反了固體原則,或其他什麼東西?

回答

6

有很多不同的方法。沒有一種「正確」的方式來做到這一點。大多數人更喜歡每個實體的存儲庫,因爲它可以讓他們以更細粒度的方式改變域服務。這絕對符合SOLID中的'S'。

在涉及到工廠時,只能在增值時使用。如果他們所做的只是包裝new操作,它們不會增加價值。

這裏有一些場景中,工廠增加價值:

  • Abtract工廠可以讓你改變庫實現的獨立客戶端代碼。這與SOLID中的'L'非常吻合,但通過使用DI將存儲庫注入需要它的域服務中,也可以達到相同的效果。
  • 當創建一個對象本身就是一個複雜的操作(即涉及的遠不止是創建一個新的實例)時,它最好封裝在API後面。