2011-08-17 41 views
0

我在我的DDD應用程序中使用實體框架,我有域,Infra和UI層。在帶實體框架的DDD中Context接口應該在哪裏?

我的上下文接口是在這裏:

public interface IDbContext 
{ 
    IDbSet<TEntity> Set<TEntity>() where TEntity : class; 
    DbEntityEntry Entry<TEntity>(TEntity entity) where TEntity : class; 

    void SaveChanges(); 
} 

我的上下文接口實際生活領域層英寸

您如何看待,我的上下文具有實體框架的依賴性,因爲我的基礎知識庫和我的整個應用程序都使用它。

我應該把這個接口放在哪裏?將其移至Infra?我想要隔離我的任何技術領域。

回答

1

您應該將界面移動到ifra層。此外,您應該確保此接口或任何實現此接口的類型不會直接用於其他任何層,因爲一旦您在其他地方訪問DbSetDbEntityEntry,就會產生依賴關係。

+0

爲什麼要將界面移到基礎層?是否有DDD解釋或其他動機? –

+0

該接口依賴於實體框架,並提到您希望將域從任何技術中分離出來。隔離=不依賴於該技術。 –

+0

是的,但是在DDD方法中這是正確的? –

0

我想你應該忘記直接使用IDbContext接口。一個更好的解決方案,恕我直言,將是在您的域上定義存儲庫接口,而不必提及實體框架,並且在基礎結構層中,您將定義該存儲庫的實現。

對模型的任何查詢都將通過存儲庫完成,而存儲庫又會返回模型或IEnumrable模型。