Nevertheless, quite often there is a need for “distribution” (I mean the creation of intermediate entities, rather than the model spreading over layers) between layers to display, for example, attributes of its entities to users (in MVx presentation templates ), as well as transfer by services ( Data Transfer Object ). Sometimes it even happens that the model is “distributed” to test some aspects. Suppose we are in Africa, we have a banana plantation, everything is cool, we grow, we sell, we grow, we sell, but then the domestic market suddenly becomes overwhelmed and we need to expand (for example, we will send bananas to Russia), we will write a WCF service that our bananas. Since bananas in Africa have a slightly different meaning than in Russia, then, accordingly, we will need only some attributes (the rest actually do not matter), which we will perish in our DTOIt would be more correct to give the BananaWrapper class the name BananaDTO, in order to accurately reflect its functional purpose, but I will leave this name for a higher level of abstraction, for example, if we need to make a banana machine and place this object in the Presenter ModelI want to note that sometimes the task of transforming objects becomes quite non-trivial and at best looks something like this (this solution head-on, there are even more sophisticated methods;)):
I think that this code will be a joy to write, and even more so to accompany, recently I have often met with such tasks recently, and was looking for a solution to the problem.public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
Class, and that's really all I need. The complexity of the overlying example has dropped to zero in my eyes. So, what kind of mechanisms lie inside AutoMapper? AutoMapper checks there are corresponding fields in the specified types, the match is carried out both by the name of the property and by its type. Even nuances such as Product.Name and ProductName will be taken into account and processed automatically (wow!). Plus, the GetXXX () methods will fall on the XXX properties (yes, and of course, for particularly irritable ones, all these charms can be disabled and redefined everything in their own correspondence tables (hereafter)). The custom configuration looks like this:* This source code was highlighted with Source Code Highlighter .
- public class BananaMapper
- {
- public BananaMapper ()
- {
- Mapper.CreateMap <Banana, BananaWrapper> ();
- }
- public BananaWrapper GetWrapper (Banana banana)
- {
- return Mapper.Map <Banana, BananaWrapper> (banana); ;
- }
- }
By the way, all your custom configurations are easy to verify using the following method:* This source code was highlighted with Source Code Highlighter .
- Mapper.CreateMap <CalendarEvent, CalendarEventForm> ()
- .ForMember (dest => dest.EventDate, opt => opt.MapFrom (src => src.EventDate.Date))
- .ForMember (dest => dest.EventHour, opt => opt.MapFrom (src => src.EventDate.Hour))
- .ForMember (dest => dest.EventMinute, opt => opt.MapFrom (src => src.EventDate.Minute));
It also does not work badly with:* This source code was highlighted with Source Code Highlighter .
- Mapper.AssertConfigurationIsValid ();
Source: https://habr.com/ru/post/71820/
All Articles