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