C# Language Utilisation de méthodes d'extension pour créer de belles classes de mappeurs


Exemple

Nous pouvons créer de meilleures classes de mappeurs avec des méthodes d’extension, Supposons que je dispose de classes DTO comme

 public class UserDTO
 {
        public AddressDTO Address { get; set; }
 }

 public class AddressDTO
 {
        public string Name { get; set; }
 }

et je dois mapper aux classes de modèle de vue correspondantes

public class UserViewModel
{
    public AddressViewModel Address { get; set; }
}

public class AddressViewModel
{
    public string Name { get; set; }
}

alors je peux créer ma classe de mappeur comme ci-dessous

public static class ViewModelMapper
{
      public static UserViewModel ToViewModel(this UserDTO user)
      {
            return user == null ?
                null :
                new UserViewModel()
                {
                    Address = user.Address.ToViewModel()
                    // Job = user.Job.ToViewModel(),
                    // Contact = user.Contact.ToViewModel() .. and so on
                };
      }

      public static AddressViewModel ToViewModel(this AddressDTO userAddr)
      {
            return userAddr == null ?
                null :
                new AddressViewModel()
                {
                    Name = userAddr.Name
                };
      }
}

Puis enfin je peux invoquer mon mappeur comme ci-dessous

    UserDTO userDTOObj = new UserDTO() {
            Address = new AddressDTO() {
                Name = "Address of the user"
            }
        };

    UserViewModel user = userDTOObj.ToViewModel(); // My DTO mapped to Viewmodel

La beauté ici est que toutes les méthodes de mappage ont un nom commun (ToViewModel) et que nous pouvons le réutiliser de plusieurs manières