Шаблон DTO против шаблона Memento

Каковы различия между паттерном DTO(по Фаулеру) и паттерном Memento(по GoF) в аспекте мотивации и реализации? Это могут быть те же классы? Если да, как я могу назвать их (xxxDTO или xxxMemento)? Есть ли у них принципиальная разница в реализации? Где их место в архитектуре MVP?

Благодарю.

2 ответа

Решение

Эти два часто используются для очень разных вещей - где вы здесь запутались? DTO - это передача данных (классы носителей), в то время как сувенир - это отслеживание изменений и возможность откатить эти изменения. Я не уверен, кроме того, что вас смущает в вашем вопросе.

Они служат разным целям. DTO - это шаблон проектирования, используемый для передачи объектов между слоями и / или уровнями программного приложения. С другой стороны, Memento - это еще один шаблон проектирования, который позволяет объекту предоставлять возможность отмены путем экстернализации своего состояния, которое впоследствии может быть восстановлено в случае необходимости. Класс DTO и класс Memento для класса могут выглядеть одинаково, просто старый объект {Insert Technology Here} - PO?O или выглядеть точно так же. Однако их необходимо хранить отдельно, потому что они будут обслуживать разные потребности и, следовательно, развиваться по-разному. Например, однажды вам может понадобиться включить свойство в ваш класс DTO, но это же свойство не важно для управления состоянием объекта и, следовательно, его не нужно добавлять в класс memento.

Другой аспект заключается в том, что DTO обычно происходит за пределами ваших классов, и ваши классы не имеют представления о DTO. На самом деле, существуют фреймворки, которые позаботятся о отображении данных для вас. С другой стороны, для шаблона сувенира ваши классы должны будут предоставить API, как вы видите на диаграммах uml, такие как CreateMemento, RestoreFromMemento и т. Д.

Другие вопросы по тегам