Является ли этот код примером шаблона адаптера?

Я хочу выполнить ответ @ ÓscarLópez для тех, кто ищет решение в 2017 году и использует python 2.7 или 3.

Метод tee () теперь не принимает аргументов ключевых слов и ждет второго аргумента целое число, а не ключевое слово. Это правильный способ использования tee ():

import itertools
it1, it2 = itertools.tee(db[3], 2)
1
задан Rafael 17 January 2019 в 09:45
поделиться

1 ответ

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

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

uml diagram

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

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

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


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

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

Похожие вопросы: