Шаблон для преобразования объектов - PullRequest
2 голосов
/ 03 марта 2012

Я ищу несколько лучших практик / шаблонов для преобразования объектов из одного в другой. Я загружаю данные из БД, используя DAO для создания своих доменных объектов. В моем приложении мне нужно преобразовать в другой объект, который действует как вход для другого модуля. Например, клиент - это объект домена, который содержит список заказов. Мне нужно превратить это в объект заказа клиента.

Public class Customer {
   String customerid
   List<Order> orders
}

Public class Order {
   Integer id
   Date orderDate
}

/** Transformed objects **/
public class CustomerOrder {
   string customerid
   Integer orderid
}

В настоящее время у меня есть интерфейс CustomerDTO, в котором есть метод для возврата списка объектов CustomerOrder и конкретный класс, реализующий интерфейс

Public interface CustomerDTO {
   List<CustomerOrder> getData(Date date)
}

Public class CustomerDTOImpl implements CustomerDTO {
   Private Customer customer
   Public CustomerDTOImpl(Customer customer) {
      this.customer = customer
   }

   Public List<CustomerOrder> getData(Date date) {
       ..... Code to loop through orders and create and return a list with matching order dates
   }
}

Для простых преобразований мне не нужен класс DTO, но мои преобразования очень сложны, и я хотел бы разделить логику преобразования для разных объектов. Изначально у меня был класс преобразователя, который просто перебирает все объекты и создает преобразованные объекты, но я не думаю, что это был хороший дизайн и мысль об этом DTO. Но я верю, что есть лучшие способы сделать это.

Также мне нужно иметь возможность использовать шаблон DTO для нескольких объектов. У этого Заказчика был только один такой объект? У меня есть 20 похожих объектов, которые нужно преобразовать в соответствующие им преобразованные объекты.

Любые мысли о лучших практиках и шаблонах были бы очень полезны. Также есть ли какие-либо генерики, которые я мог бы использовать, чтобы лучше масштабировать их.

Спасибо Джавид

Ответы [ 2 ]

0 голосов
/ 03 марта 2012

Вам нужно, чтобы объект расширял или реализовывал другой объект, чтобы вы могли приводить их как объекты разных типов. Я предлагаю изучить полиморфизм, чтобы сделать это. Название звучит страшно, но это не страшно

0 голосов
/ 03 марта 2012

Просто напишите новый DAO, который загружает данные из БД в правильные доменные объекты.

...