Это, наверное, только я, поэтому я задаю вопрос. Информационный эксперт, "Скажите не спрашивайте", и SRP часто упоминаются вместе как лучшие практики. Но я думаю, что они не согласны. Вот о чем я говорю:
Код, который поддерживает SRP, но нарушает Tell Do not Ask, Info Expert:
Customer bob = ...;
// TransferObjectFactory has to use Customer accessors to do its work,
// violates Tell Don't Ask
CustomerDTO dto = TransferObjectFactory.createFrom(bob);
Код, который рекомендует Tell Do not Ask/Info Expert, но нарушает SRP:
Customer bob = ...;
// Now Customer is doing more than just representing the domain concept of Customer,
// violates SRP
CustomerDTO dto = bob.toDTO();
Если они действительно расходятся, это оправдание моего ОКР. В противном случае, пожалуйста, наполните меня тем, как эти практики могут сосуществовать мирно. Спасибо.
Изменить: кто-то хочет определить термины -
Эксперт по информации: объекты, которые имеют данные, необходимые для операции, должны содержать операцию
Скажите не спрашивайте: не просите объекты для данных для выполнения работы; расскажите объектам о работе
Единый принцип ответственности: каждый объект должен иметь узко определенную ответственность