1. 程式人生 > >.NET的DTO對映工具AutoMapper

.NET的DTO對映工具AutoMapper

說明:這是一款DTO的對映工具,如果你不瞭解DTO,可能會不理解它到底有什麼意義。

概述:

AutoMapper是基於物件到物件約定的對映工具,它可以把複雜的物件模型轉為DTO,或者其他的--那些讓設計更合理更適於序列化、通訊、傳遞訊息的簡單物件或者乾脆就只是在領域層與應用層之間搭建一個簡單的ACL防護層(就像DTO一樣,用於程式碼的顯示轉換)來增加各自層的相互獨立性。

一般用於ViewModel模式和跨服務範疇。

AutoMapper包含以下功能:


簡介:

AutoMapper是什麼?

AutoMapper是一個將物件對映到物件的對映工具。物件對映的工作機制是:通過輸入一個型別的物件然後將其轉換成另一個不同型別的物件並輸出。在這裡

AutoMapper要做的(所擅長的)就是提供一些方便的方法,把那些麻煩累人的工作(指物件轉換)從型別轉換演算法中剔除掉。只要需要轉換的型別遵循了AutoMapper制定的規則,那麼你基本上就不用再寫配置演算法來實現兩個型別之間轉換的工作了,AutoMapper會替你自動完成。

//原文:把工作從如將型別A轉換成型別B的對映演算法中剔除,如果型別B遵循了AutoMapper制定的規則,那麼你基本上就可以以零配置來實現兩個型別之間轉換的工作了。( What makes AutoMapper interesting is that itprovides some interesting conventions to take the dirty work out of figuringout how to map type A to type B.

為什麼使用AutoMapper?

寫型別轉換的對映程式碼實在一件枯燥的事情,而對對映做測試則更乏味。AutoMapper為型別轉換提供了非常簡單的配置演算法,同樣也易於測試。

現在一個現實的問題是,“為什麼使用物件到物件的對映?”

類似於‘對映轉換’這樣的情況將會發生在專案中非常多的地方,儘管大部分只會發生在層與層之間的邊界,例如表示層與領域層之間,或者服務層與領域層之間。如果層與層之間有相關聯的話,那麼一層的變化會影響到另一層,因此,物件到物件的對映可以隔離這些層的模型,讓每一層的變的更加獨立,每一層的變化只會影響到自身。

怎樣使用AutoMapper?

首先,你需要一個源資料物件和一個目的資料物件。在設計目的資料物件時,會受到它所在層的影響(即在轉換物件時你需要

getXXXsetXXX一堆方法),但是對於AutoMapper而言,它最大的優勢就是隻要你在設計目的資料物件時,讓其中的成員(按一定規則)去匹配源資料物件成員的命名方法,那麼這些問題就能很好解決。

例如:一個源資料物件中有一個屬性叫:“FirstName,那麼它就會自動對映到目的資料中另一個叫“FirstName”的屬性。

也就是說,你只需要有兩個物件,然後引用AutoMapper,那麼你將能輕鬆的建立物件之間的對映

比如:

Mapper.CreateMap<Order,OrderDto>();

CreateMap方法型別左邊的是源資料,右邊的是目的資料,在執行完這條對映語句後,就可以使用Map方法了。

OrderDtodto = Mapper.Map<Order, OrderDto>(order);

AutoMapper也有非泛型的方法,不過對於那些情況,你可能不好判斷編譯時的型別。

AutoMapper該在什麼地方配置?

如果你使用靜態的對映方法,配置時只需要在appDomain中配置一次,這意味著你最好的選擇就是把配置程式碼方法在程式啟動項中,例如Global.asax。需要說明的是,在bootstrapper(啟動載入器)內配置自己,這個bootstrapper也被稱作為啟動方法。

如何測試一個對映?

建立一個對映測試,你要做兩件事

·        呼叫啟動項中建立對映的方法

·        呼叫Mapper.AssertConfigurationIsValid方法

就像這個例子一樣

AutoMapperConfiguration.Configure();
 
Mapper.AssertConfigurationIsValid();