4

Процессуальный код получает информацию, затем принимает решения. Объектно-ориентированный код говорит объектам делать что-то.Не работает шаблон Factory, нарушающий принцип «Tell, Do not Ask»?

Alec Sharp

Когда мы используем Factory pattern, мы принимаем решение, основанное на свойстве класса, за исключением, чем класс фабрики, так что это не нарушает Tell, Don't Ask principle?

ответ

2

Нет, мы не нарушаем.

Когда мы сообщим класс Factory для создания экземпляра объекта, вся ответственность лежит в пределах класса Factory. Вызывающий не влияет на конкретный класс.

Сам класс Factory также не нарушает это правило. Он делает то, что он должен делать: на основе данных правил (пусть он будет жестко закодирован или установлен извне или может быть чем-то более сложным) решает, какой объект генерировать. Но каждый бит логики находится внутри фабричного метода.

+0

, но, например, класс Factory принимает решение на основе состояния продукта в http://www.oodesign.com/factory-pattern.html. (запрос продукта, а затем принятие решения) – Masoud

+1

Вы имеете в виду на основе идентификатора продукта? это не проблема, потому что только класс Factory может знать обо всех возможных классах, и у него есть логика, чтобы решить, какой из них использовать. Вы не можете делегировать эту ответственность любому другому классу. – gaborsch