我有四個組件; UserInterface,BusinessLogic,DataAccess,Common。UI應該引用存儲庫嗎?
用戶界面引用DataAccess中的存儲庫,這是不好的做法?我應該在BusinessLogic中創建傳遞方法,以便UserInterface不耦合到DA程序集?
即使在BusinessLogic方法只會調用相關Repository方法的情況下,也是如此?
或者我是懸掛式的?
我有四個組件; UserInterface,BusinessLogic,DataAccess,Common。UI應該引用存儲庫嗎?
用戶界面引用DataAccess中的存儲庫,這是不好的做法?我應該在BusinessLogic中創建傳遞方法,以便UserInterface不耦合到DA程序集?
即使在BusinessLogic方法只會調用相關Repository方法的情況下,也是如此?
或者我是懸掛式的?
而不是想到用戶界面與存儲庫交談,可以考慮取決於抽象的實現。在這種情況下,UI取決於IRepository
。 IRepository
如何實施並不重要。
並將這些全部放入單獨的組件是矯枉過正。只是使用命名空間來隔離你的代碼。維護起來會容易得多。
我想我已經看到我是如何將這個問題引向混亂的,稱DA層爲存儲庫是一個壞主意,因爲它不僅僅是一個回購。編輯的問題。我想我明白你的意思,我應該把我的Irepo移到共同的議會。 – 2012-07-05 20:13:20
否,除非有多個組件的物理需求,使所有組件在一個組件中保持簡單。理想情況下,存儲庫在域內具有高度特定性,而不是「普通」實用程序。 – 2012-07-06 12:27:34
如果您正在嘗試進行域驅動設計,那麼在您考慮在用戶界面中使用它之前,請理解存儲庫的角色。這裏非常好的解釋http://devlicio.us/blogs/casey/archive/2009/02/20/ddd-the-repository-pattern.aspx
我認爲分層結構的主要原因是'分離關注'。 SoC基本上提供鬆散耦合。所以在DAL中引用UI並不是好事。
另一方面,UI應該照顧用戶交互(不直接從DAL調用)。 BL應該負責驗證並調用DAL方法。 DAL是最後一步,它可以根據SQL方面驗證數據,然後處理SQL語句。
我想你缺少一個圖層。實體層或數據傳輸層。
這不是一個好的做法,用戶界面必須知道關於DAL的信息,這就是爲什麼您擁有業務層。
我認爲你應該做它的經典方式UI - BL - DAL和向後應該是一樣的,使用數據傳輸對象
這些層之間始終使用DTO,傳輸從UI到BL對象,從BL到DAL並且以這種方式向後。
你正在迂腐。 – Oded 2012-07-05 19:50:34