貧血模型;DTO:資料轉送對象(Data Transfer Object);AutoMapper ;Domain Model(領域模型);DDD(領域驅動設計)

來源:互聯網
上載者:User

標籤:android   style   class   blog   code   http   

====================== 我自己的理解 ==========================

一:  DTO  我自己的理解,就是 比如你有一個類,跟資料庫的table表結構一模一樣,主鍵外鍵什麼的都有,但是這個 model類,你返回資料到 UI層的時候,有些資料是不用的,你就得自己new一個新類出來,新的類從舊的類裡面拿值,然後給別人用的就是新的類別,有點類似於我們做介面給android手機用一樣的,資料庫的類和介面用的類,很相似,但是東西少了的很多,這個新的類(缺胳膊斷腿的),只用來傳遞資料的,就是DTO 資料轉送對象

 

二 :  AutoMapper :這個就是一個工具,可以用來幫你把 舊的類和 新的類,進行一個資料隱射.  舊的類別和新的類別,可能是不一樣的,例如  舊的類別

 

一本書,有多個作者,每個作者,有自己的名字和地址,如果我想返回給 android的介面一個  json列表,每行資料就是這本書,以及這本書有哪些作者和作者的地址

那麼返回的類可能就是這個類的一個list,這個我們就可以用  AutoMapper來幫我們進行關係映射了

 

 

三 : Domain Model(領域模型) :這玩意又是個啥呢? 

四: DDD 又是個啥??

 

 

 

=======================  推薦答案  ========================

 

一些orm架構,在用到Entity的時候有一些開原始碼用到了AutoMapper(如:nopcommence),將資料對象轉成DTO。比如在ORM中,與資料庫互動用的Model模型是具有很多屬性變數方法神馬的。而當我們與其它系統(或系統中的其它結構)進行資料互動時,出於耦合性考慮或者安全性考慮或者效能考慮(總之就是各種考慮),我們不希望直接將這個Model模型傳遞給它們,這時我們會建立一個貧血模型來儲存資料並傳遞。神馬是貧血模型?貧血模型(DTO,Data Transfer Object)就是說只包含屬性神馬的,只能儲存必須的資料,沒有有其它任何的多餘的方法資料什麼的,專門用於資料傳遞用的類型對象。在這個建立的過程中,如果我們手動來進行,就會看到這樣的代碼:
 
B b=new B();b.XXX1=a.XXX1;b.XXX2=a.XXX2;.........return b;


此時,AutoMapper可以發揮的作用就是根據A的模型和B的模型中的定義,自動將A模型映射為一個全新的B模型。基於訪問性的控制或從模型本身上考慮。對外開放的原則是,盡量降低系統耦合度,否則內部一旦變更外部所有的介面都要跟隨發生變更;另外,系統內部的一些資料或方法並不希望外部能看到或調用。類似的考慮很多,只是舉個例子。系統設計的原則是高內聚低耦合,盡量依賴抽象而不依賴於具體。這裡感覺automapper就是使資料庫實體對一個外部調用實體的轉換更簡便(不用一個屬性一個屬性的賦值)。
例如1:資料庫裡面有使用者資訊表,供別的系統調用,提供了資料介面。如果直接暴露了資料庫層的表結構的話,會對系統本身產生依賴。具體表現在,假定現在因為某種需要,為使用者資訊增加了十個欄位的資訊,那麼,如果不進行類型映射的話,會導致所有基於此使用者資料結構的模組集體掛掉(介面約定變更)。而如果使用了映射的話,我們可以在內部進行轉換,保持原有介面不變並提供新的更全面的介面,這是保證系統的可維護性和可遷移性。

例如2:一個Web應用通過前端收集使用者的輸入成為Dto,然後將Dto轉換成領域模型並持久化到資料庫中。相反,當使用者請求資料時,我們又需要做相反的工作:將從資料庫中查詢出來的領域模型以相反的方式轉換成Dto再呈現給使用者。使用AutoMapper(一個強大的Object-Object Mapping工具),來實現這個轉換。
 
可以參考下  http://www.cnblogs.com/jobs2/p/3503990.html
 
 

戀愛雖易,相處不易:當EntityFramework愛上AutoMapper

結婚雖易,終老不易:EntityFramework和AutoMapper的婚後生活

 

AutoMapper參考文檔:

  • 【AutoMapper官方文檔】DTO與Domin Model相互轉換(上)
  • 【AutoMapper官方文檔】DTO與Domin Model相互轉換(中)
  • 【AutoMapper官方文檔】DTO與Domin Model相互轉換(下)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.