簡單使用AutoMapper實現DTO轉換


  DTO(Data Transfer Object)數據傳輸對象,只是傳輸數據,完成與領域對象之間的轉換,並不包含領域業務處理。
  當領域模型設計人員只關注核心業務,滿足於領域模型的精巧,而不關心具體實現的時候,DTO就會大量出現。

  系統復雜化后,DTO可能是多個Domain Model組合實現。

  為什么要使用DTO?
  1、隔離Domain Model,使改動領域模型而不影響UI,保持領域模型的安全,不暴露業務邏輯。
  2、在分布式模式下,不同的場景使用相同的數據結構有不同的需求。

 

  簡單示例:

  Order.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AppExample
{
    public class Order
    {
        public int OrderID { get; set; }

        public string OrderNumber { get; set; }

        public DateTime OrderDate { get; set; }
    }
}

  OrderDTO.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AppExample
{
    public class OrderDTO
    {
        public int OrderID { get; set; }

        public string OrderNumber { get; set; }

        public DateTime OrderDate { get; set; }

        public int OrderYear { get; set; }
    }
}

  Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AppExample
{
    class Program
    {
        static void Main(string[] args)
        {
            Order order = new Order
            {
                OrderID = 1,
                OrderNumber = "201406040001",
                OrderDate = DateTime.Now
            };

            AutoMapper.Mapper.Initialize(cfg =>
            {
                cfg.CreateMap<Order, OrderDTO>()
                    .ForMember(dest => dest.OrderYear, opt => opt.MapFrom(src => src.OrderDate.Year));
            });

            OrderDTO orderDTO = AutoMapper.Mapper.Map<Order, OrderDTO>(order);

            Console.WriteLine("{0}-{1}-{2}-{3}", orderDTO.OrderID, orderDTO.OrderNumber, orderDTO.OrderDate, orderDTO.OrderYear);
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM