[C#] Mapper Class Example

ตัวอย่าง Class ที่ Map ระหว่าง DTO และ Data Mapper ใน pattern of enterprise application architecture ของลุงมาร์ตินครับ

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

using WindowsFormsModel.BusinessObjects;
using WindowsFormsModel.ActionServiceReference;

namespace WindowsFormsModel.DataTransferObjectMapper
{
    /// <summary>
    /// Static class that maps data transfer objects to model objects and vice versa.
    /// </summary>
    internal static class Mapper
    {
        /// <summary>
        /// Maps array of customer data transfer objects to customer model objects.
        /// </summary>
        /// <param name="customers">Array of customer data transfer objects.</param>
        /// <returns>List of customer models.</returns>
        internal static IList<CustomerModel> FromDataTransferObjects(Customer[] customers)
        {
            if (customers == null)
                return null;

            return customers.Select(c => FromDataTransferObject(c)).ToList();
        }

        /// <summary>
        /// Maps single customer data transfer object to customer model.
        /// </summary>
        /// <param name="customer">Customer data transfer object.</param>
        /// <returns>Customer model object.</returns>
        internal static CustomerModel FromDataTransferObject(Customer customer)
        {
            return new CustomerModel
            {
                Company = customer.Company,
                City = customer.City,
                Country = customer.Country,
                CustomerId = customer.CustomerId,
                Orders = FromDataTransferObjects(customer.Orders),
                Version = customer.Version
            };
        }

        /// <summary>
        /// Maps array of customer data transfer objects to customer model objects.
        /// </summary>
        /// <param name="orders">Array of order data transfer objects.</param>
        /// <returns>List of order model objects.</returns>
        internal static IList<OrderModel> FromDataTransferObjects(Order[] orders)
        {
            if (orders == null)
                return null;

            return orders.Select(o => FromDataTransferObject(o)).ToList();
        }

        /// <summary>
        /// Maps single order data transfer object to order model.
        /// </summary>
        /// <param name="order">Order data transfer object.</param>
        /// <returns>Order model object.</returns>
        internal static OrderModel FromDataTransferObject(Order order)
        {
            return new OrderModel
            {
                OrderId = order.OrderId,
                Freight = order.Freight,
                OrderDate = order.OrderDate,
                RequiredDate = order.RequiredDate,
                OrderDetails = FromDataTransferObjects(order.OrderDetails),
                Version = order.Version
            };
        }

        /// <summary>
        /// Maps arrary of order detail data transfer objects to list of order details models.
        /// </summary>
        /// <param name="orderDetails">Array of order detail data transfer objects.</param>
        /// <returns>List of order detail models.</returns>
        internal static IList<OrderDetailModel> FromDataTransferObjects(OrderDetail[] orderDetails)
        {
            if (orderDetails == null)
                return null;

            return orderDetails.Select(o => FromDataTransferObject(o)).ToList();
        }

        /// <summary>
        /// Maps order detail data transfer object to order model object.
        /// </summary>
        /// <param name="orderDetail">Order detail data transfer object.</param>
        /// <returns>Orderdetail model object.</returns>
        internal static OrderDetailModel FromDataTransferObject(OrderDetail orderDetail)
        {
            return new OrderDetailModel
            {
                ProductName = orderDetail.ProductName,
                Discount = orderDetail.Discount,
                Quantity = orderDetail.Quantity,
                UnitPrice = orderDetail.UnitPrice,
                Version = orderDetail.Version
            };
        }

        /// <summary>
        /// Maps customer model object to customer data transfer object.
        /// </summary>
        /// <param name="customer">Customer model object.</param>
        /// <returns>Customer data transfer object.</returns>
        internal static Customer ToDataTransferObject(CustomerModel customer)
        {
            return new Customer
            {
                CustomerId = customer.CustomerId,
                Company = customer.Company,
                City = customer.City,
                Country = customer.Country,
                Version = customer.Version
            };
        }
    }
}

Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.