2012-09-15 25 views
3

我有asp.net mvc 2應用程序。我有混淆創建DTO和域實體。DTO和域對象,WCF以及數據庫層交互

MVC控制器集成點: 1)第三方WCF 2)DB層

WCF返回一個特定公司的人員信息和公司的一些信息。

我已經生成了WCF的代理並在代理上編寫了一個服務包裝器。 服務包裝器正在與WCF通話並將結果映射到DTO類ContactsDTO 服務層處於不同的項目中。

以下是我的領域類

Company 
Person 

DTO class 
//it contains 
class ContactsDTO 
{ 
Person person, Company[] company 
} 

控制器操作調用與companyID包裝,並得到DTO類的對象。 並從dto更新公司信息。它會更新Session中的公司信息並將公司[]數組傳遞給其他一些操作。

DB互動:

現在根據一些業務邏輯,我必須插入人-ID和公司ID與數據庫中的其他一些信息。

此我已經建立另一個

class DBDTO 
{ 
Person person, Company[] company, OtherInfo otherInfo[] 

} 

此DBDTO製備並傳遞給DB層(這是使用LINQ到SQL)。

問題

是它寫的方法做。 DTO互動有何改進?什麼都 的變化,我可以做,以改善整體架構

+1

DTO,因爲它的名稱是數據傳輸對象。它應該僅用於傳輸,不應封裝域對象和數據庫對象。也就是說,你的數據庫層可能有一些特定的對象,例如直接映射到/到DTO的DBObject,而客戶端的DTO直接映射到/到客戶端對象,例如ClientEntity。是的,有很多的基礎設施代碼和映射,但最終你會得到乾淨,獨立的客戶端和數據庫層域對象代碼。 – Algirdas

回答

0

另一種替代DB-綁定對象被翻譯到的DTO(這需要時間)是使用POCO(普通老式CLR對象),並直接把它們作爲你的域模型,可以存儲在數據庫中的對象以及傳遞給控制器​​進行可視化的對象。 這可以讓你開始:Working with POCO Entities

這種方法有幾個優點

可以輕鬆將它們序列化爲服務響應(如果您正在構建API)
0

我同意Algirdas區分模型,因爲不同的責任。

順便說一句:MVC不是一個層的概念。這是三個責任和他們合作的概念。雖然它經常被用於分層,但如果您僅將應用程序層分開並應用「MVC」,則會遇到SRP問題。如果你有每層的MVC,那麼你會很好。

畢竟,如果它是一個小應用程序,你可能永遠不會達到臨界質量與架構有問題。