2012-02-18 96 views
0

我閱讀這篇文章,並對此有疑問。DDD中的存儲庫層

存儲庫模式是一個門面,它將您的持久性 從您的域摘除。一方面它假裝是一個集合 - 在 另一方面它涉及你的持久性 實施的技術問題。

這是否意味着您將存儲庫中的方法命名爲如果您創建集合那樣。例如:

addDomainModel(...) 
getDomainModel(...) 

等等?或者你會說出這些方法的名稱:

saveDomainModel(...) 
fetchDomainModel(...) 

什麼是最好的,或最正確的?我應該有方法名稱說明它添加什麼,或者只是:

add(...) 
get(...) 

它會在正常的集合?

http://devlicio.us/blogs/casey/archive/2009/02/20/ddd-the-repository-pattern.aspx

+0

addDomainModel() getDomainModel() 檢查:http://stackoverflow.com/questions/6851147/update-method-for-generic-entity-framework-知識庫 – Nathan 2012-02-18 15:50:01

回答

1

對此沒有要求。您以最自然的方式使用方法。 通常我的倉庫看起來像這樣(C#代碼)

public interface ImCommandRepository 
{ 
    Entity Get(int id); 
    Entity Get(string name); 
    void Save(Entity value); 
    void Delete(int id); 
} 

public interface ImQueryRepository 
{ 
    PaginatedResult<ViewModel> GetEntitiesA(int skip,int take); 
    PaginatedResult<ViewModel> SearchEntitiesB(string keyword,int skip,int take); 
} 

正如你看到我使用不同的存儲庫更新持久性和查詢持久性。雖然第一個具有非常常見的CRUD方法來處理將被創建/更新/刪除的實體,但另一個只是列出或搜索數據庫並返回適合視圖的模型。您可以根據使用情況添加或命名方法,您不必將存儲庫實現爲集合(即實現預定義的接口),只需將其作爲一個對待即可。重要的是保持域不可知的持久性實現。

0

DDD的目標之一就是域專家可以讀取代碼。所以你應該命名你的方法來使你的代碼更具可讀性。從這個角度看,在我看來,itemRepository.add(item)甚至items.add(item)比例如itemRepository.saveItem(項目)。看看這個:

How to Write a Repository