AutoMapper知多少?

來源:互聯網
上載者:User

標籤:

 1.      事件的背景

  初始AutoMapper是在做成績管理系統1.0的時候,那個時候因為系統採用了WCF+MVC+easyUI+EF的架構,那麼我們在實現B層與WCF層之間的實體轉換的時候就需要藉助於某種方法(用純程式碼實現)或者某種工具實現,我採取的是後者,因為每當遇到一個問題的時候,我總是覺得有比寫純程式碼更加簡潔的方法。

  那個時候只是上網查個例子就用,別的也沒有想那麼多。直到今天我的一個組內的夥伴讓我調試的一個錯誤,我才真正意識到自己的是需要深入研究的。

  初接手一個項目的時候,對於架構的以及業務的分析不是那麼的清晰的條件下,大多數的人採用的是按實體劃分而不是業務劃分,估計就有人想省事,那就是採用把Model層的各個實體直接定義到資料契約或者我們說的提供給ui供顯示的使用的viewModel,但是這樣的結果出現偶然性,如果沒有主外鍵的關係或者其它的關係複雜的方法,那麼直接引入Automapper什麼時候估計也不會報錯,但是如果你的有複雜的主外鍵關係或者其它的一些複雜的方法,那麼直接引入而不加配置的話,可能會出現很多的錯誤,比如出現“miss type map configuration or unsurported”等等。

  此時經過尋找將供UI顯示的實體中的顯示下面的存在複雜的主外鍵關係,注釋掉後發現了,困擾的問題得以解決了。下面我們來認識一下Automapper吧。

 2.      Automapper知多少?  ?  什麼是Automapper

  在學習EF的時候我們知道了ORM(Object Relational Mapping)映射,是一種對象關係的映射,對象-關係映射(ORM)系統一般以中介軟體的形式存在,主要實現程式對象到關聯式資料庫資料的映射。

  而Automapper是一種實體轉換關係的模型,AutoMapper是一個.NET的對象映射工具。主要作用是進行領域對象與貧血模型(DTO)之間的轉換、資料庫查詢結果映射至實體物件。

  ?  什麼是DTO?  概念

  資料轉送對象(DTO)(DataTransfer Object),是一種設計模式之間傳輸資料的軟體應用系統。資料轉送目標往往是Data Access Objects從而從資料庫中檢索資料。資料轉送對象與資料互動對象或Data Access Objects之間的差異是一個以不具有任何行為除了儲存和檢索的資料(訪問和存取器)。

  為什麼用?

  引用別人的話說“表現層與應用程式層之間是通過資料轉送對象(DTO)進行互動的,資料轉送對象是沒有行為的POCO(Plain Old CLR Object)對象,它的目的只是為了對領域對象進行資料封裝,實現層與層之間的資料傳遞。為何不能直接將領域對象用於資料傳遞?因為領域對象更注重領域,而DTO更注重資料。不僅如此,由於“富領域模型”的特點,這樣做會直接將領域對象的行為暴露給表現層。

  需要瞭解的是,資料轉送對象DTO本身並不是業務對象。資料轉送對象是根據UI的需求進行設計的,而不是根據領域對象進行設計的。比如,Customer領域對象可能會包含一些諸如FirstName, LastName, Email, Address等資訊。但如果UI上不打算顯示Address的資訊,那麼CustomerDTO中也無需包含這個 Address的資料”。

  ?  什麼是領域對象?  概念

  領域模型是對領域內的概念類或現實世界中對象的可視化表示。又稱概念性模型、領域物件模型、分析物件模型。它專註於分析問題領域本身,發掘重要的業務領域概念,並建立業務領域概念之間的關係。

  領域模型就是物件導向的,物件導向的一個很重要的點就是:“把事情交給最適合的類去做”,即:“你得在一個個領域類之間跳轉,才能找出他們如何互動”。在我們的系統中Model(EF中的實體)就是領域模型對象。領域對象主要是面對業務的,我們是通過業務來定義Model的。

  ?  怎麼用?

  這個網上的資料很豐富,大家可以上網尋找,對於一件事情,別人告訴你有這個事情,剩下的事情就是自己去學,給大家推薦一個部落格

http://www.cnblogs.com/smileberry/p/3838143.html。

 3.      小結

  我們定義的領域模型對象例如Model面向業務,而DTO(在我們的系統中是資料契約或者說是viewModel是供ui使用的)是面向介面UI,所以我們應該根據UI的需求來定義。利用DTO可以使表現層與Model解耦解除,表現層(也就是顯示的介面)不需要引用Model,這樣的好處是即使我們的模型或者model發生改變,而介面無需改變的情況下,我們可以直接修改model而無需更改介面的顯示,這樣是實現瞭解耦合。


AutoMapper知多少?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.