Является ли этот код примером шаблона адаптера? - PullRequest
0 голосов
/ 16 января 2019

PageInfo класс

public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    private int pageNum;
    private int pageSize;
    private int size;
    private int startRow;
    private int endRow;
    private long total;
    private int pages;
    private List<T> list;
}

ResponseDto class

public class ResponseDto<T> implements Serializable {

    private String msg = "success";

    private int code = SUCCESS;

    private T data;
}

PageResponseDto class

public class PageResponseDto<T> extends ResponseDto<List<T>> {

    private int pageNum;

    private int pageSize;

    private int size;

    private long total;

    private int pages;

    public PageResponseDto() {
        super();
    }

    public PageResponseDto(PageInfo<T> p) {
        super(p.getList());
        this.pageNum = p.getPageNum();
        this.pageSize = p.getPageSize();
        this.size = p.getSize();
        this.total = p.getTotal();
        this.pages = p.getPages();
    }
}

использование

public PageResponseDto<OrderDto> findStoreOrderByPage(Integer pageNum, Integer pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List<OrderDto> storeOrderList = basicDataMapper.findStoreOrderByPage();
    PageInfo<OrderDto> p = new PageInfo<>(storeOrderList);
    return new PageResponseDto<>(p);
}

Поскольку система имеет единый возвращаемый класс ResponseDto, я хочу преобразовать класс PageInfo в ResponseDto. Поэтому я написал этот код. У меня возник вопрос этот код можно назвать Adapter Pattern? Если нет, использует ли этот код шаблоны проектирования? Или как назвать это преобразование?

1 Ответ

0 голосов
/ 17 января 2019

Текущий дизайн

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

uml diagram

Ваша цель - «преобразовать PageInfo в ResponseDto». Я предполагаю, что вы имеете в виду, что хотите передать экземпляр ResponseDto, который инкапсулирует и делегирует классу PageInfo.

Причина, по которой это не является примером шаблона Adapter, заключается в том, что в настоящее время нет интерфейса, уникального для ResponseDto. На самом деле, он вообще не имеет интерфейса и не делегирует PageInfo & ndash; Задача 1.

Шаблон адаптера специально создан для инкапсуляции различных интерфейсов.


Примечания / Предложения / Вопросы:

  • PageResponseDTO в настоящее время нарушает закон Деметры; он слишком много знает о внутренней структуре PageInfo.
  • PageInfo ломает инкапсуляцию, раскрывая всю ее внутреннюю структуру.
  • Вместо того, чтобы PageResponseDTO копировать все из PageInfo, почему бы просто не сохранить ссылку на экземпляр PageInfo и делегировать его при необходимости?
  • Вы всегда можете скопировать интерфейс делегата, а не раскрывать его, но, если вы обнаружите, что копируете слишком много его функциональных интерфейсов, рассмотрите возможность его предоставления. В «Рефакторинге» Мартин Фаулер называет это «Инкапсуляция делегата» и «Исключение человека посередине» соответственно.
...