0

我在MVC應用程序中使用UnitOfWork/Service Layer/Repository/EF4 w/POCO設計。UnitOfWork和分離的擔憂?

到目前爲止,我有這樣的:

1)MVC Web應用程序(Project.dll)
2)服務層(Project.Data.Services.dll)
3)庫層(Project.Data。 Repositories.dll)
4)POCOS(Project.Data.Domain.dll)
5)EF4 /背景層(Project.Data.dll)

每一層只引用下方的層和Project.Data 。域(POCO類)。

我目前擁有的的UnitOfWork接口/基地的Project.Data.dll,但現在所有的層必須引用。這是一個糟糕的設計?如果是這樣,它住在哪裏?

回答

2

這只是一個意見。

域對象是業務的一部分。競賽和存儲庫一樣。

事實上,我的觀點是OR/M是在商店的關係數據庫或其他類型的抽象等等這些可以作爲一種面向對象的商店採取行動。

OR/M在現代軟件解決方案中拋棄了數據層。

存儲庫,域上下文,域對象是業務層的一部分。工作

單位是一種軟件設計模式,它不僅處理數據庫或數據層,但它可以管理更多的東西,如一個網絡交易。我建議這應該包含在一些名稱空間,如「YourCompany.YourProject.Patterns.UnitOfWork」或類似的東西。

服務與數據無關。我想建議一個「YourCompany.YourProject.Services」命名空間。

還有一點是你波蘇斯似乎DTO工作過,因爲你正在使用無處不在,即使通過層和/或層間傳遞數據。這可以在裸體對象實現或類似的事情中可以,但是您需要注意將域對象用作DTO的事實,因爲它們可能包含屬性,信息,行爲或OR/M代理隱藏成員,這些成員可能影響物體的重量 - 記憶的使用 - 。

以最後一段其實,我建議你與DTO在業務上面一層的任何工作,所以你的服務將與該服務的消費者將需要正常工作性質的特定範圍返回的DTO。

DTO,模式的實現和所有項目中共享的項目部分解決方案應該位於某個名爲「YourProject.Shared」的項目中,並且此程序集不得引用任何圖層:它必須保持圖層不變,所以在任何地方引用它都不會強制產生無用的依賴關係。

那麼,這是我的意見和工作方式在我的項目。

+0

@Mat - 我在我的MVC應用程序中使用查看/編輯模型,然後使用AutoMapper將pocos映射到模型。 – Sam 2011-03-03 07:30:03

+0

好吧,我已經用你在你的問題中提到的信息回答了你! :D無論如何,我只是解釋道,爲了給你一個正確的命名方向,因爲即使你使用AutoMapper或其他東西,用正確的命名來調用東西也是有意義的,所以源代碼更易讀,或者至少可以找到東西在正確的地方。 – 2011-03-03 07:32:50

+0

@Mat - 所以你不認爲存儲庫和以下是數據層?我會同意POCO是肯定的業務對象,但我認爲這些存儲庫和ef是數據。沒有? – Sam 2011-03-03 07:42:22

1

如果不希望其他圖層引用數據項目,則必須將IUnitOfWork分開以分開項目,並使用依賴注入與控制容器的一些Inversion。