1. 程式人生 > >DTO、Model,ViewModel,Object,Entity作用(轉載)

DTO、Model,ViewModel,Object,Entity作用(轉載)

DTO、Model和ViewModel是我們經常在應用架構中的持久層、表示層等層次上出現的資料載體,學習OOP的朋友也經常會接觸到Object和Entity。在這裡我希望與大家交流一下這幾個概念。

1.DTO

資料傳輸物件(DTO)是用來在軟體應用子系統之間傳遞資料模式,DTO經常被用來跟資料訪問物件(DAO)一起從資料庫查詢資料。
既然DTO是一種模式,那麼它解決了哪些問題呢?

早期的遠端方法呼叫,此圖演示了遠端客戶端

通過一系列方法訪問客戶名字的各個元素。

使用了DTO模式之後,遠端客戶端通過一次請求取得了客戶名稱DTO,隨後在本地呼叫

實現各個名稱元素的訪問。

現在這種模式不僅在企業模式的網路邊界上運用,還在應用架構的各個層次間有了身影。

2.Model

Model最早在MVC(Model-View-Controller)模型中被引入,實際上內容與Domain Model一致。
領域模型(Domain Model)是在軟體工程中引入的一種概念模型,它被用來關聯所有的主題資料進而解決指定問題。它描述了各種實體和它們的屬性、角色和關係,以及那些問題領域的約束。

Martin Fowler在2003年提出的定義則更為簡練:一個物件的領域模型包含物件的資料和行為。

Model是可以應用於DTO模式的,但是出於DTO模式是主要解決資料傳輸,不太關注行為,所以可能是Model的資料部分和共同功能部分。

3.ViewModel

ViewModel是在MVVM模式(應用於WPF及Silverlight框架)中,在展示層頻繁使用的Model。

4. Object、Value Object和Entity Object

Entity Object實際就是Entity,與Value Object不同,Entity都有主鍵來標識資訊的唯一性如個人資訊。而Value Object則是可能在系統中重複的,如整個公司人員的郵編或者內線電話,它是不應有主鍵的。一般系統中對於Entity Object和Value Object的操作策略也不同,例如Entity Object採用更新方式,而Value Object則採用根據其關聯的Enity進行整體覆蓋的方式進行。

Entity和Model在於設計層次的不同,Entity一般是從資料庫設計開始的系統從表對映過來的,所以這個Entity也可以理解為資料實體而非領域模型。而Model則是根據主要問題領域,從業務上開始設計的,資料更新方面可能比Entity更復雜,但是在業務處理上卻比Entity更靈活。

個人感覺敏捷開發和業務需求比較弱的系統適合使用Entity,而業務複雜且需求性強的系統,應該採用領域模型進行設計。但並不是絕對劃分清楚的,很多系統中都會有兩者的身影存在只是解決的問題和方面不同而已。

引用地址:http://www.chawenti.com/articles/5100.html