1

Допустим, есть класс, называемый Animal, который получает запрос, включая свойства животного (type, color, size), а затем он упорядочивает и магазины, которые содержаться в базе данных. Со временем свойства животных меняются. Что-то добавлено, и теперь у нас есть location.сохранить обратную совместимость без отдельного класса

Будет флаг версии, который может использоваться для разветвления запросов в любое время.

Как бы вы настроили класс животных, чтобы он мог обрабатывать старые запросы, а также новые? Есть ли какой-нибудь проект для этого?

ответ

2

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

  • Перегрузка ток методы запрос с дополнительным аргументом местом как Animal::Request(type,color,size,location) поэтому ваш класс может обрабатывать как. Подробнее о перегрузке here.
  • Добавьте аргумент местоположения по умолчанию в существующий метод запроса и попросите его, например, старые звонки type,color,size как звонки type,color,size,''. Подробнее о аргументах по умолчанию here.
2

Иногда вы просто не можете сделать что-то обратно совместимым, это зависит от вашей логики (правил) домена.

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