Czy nie są informacje Expert & Tell Nie pytaj w sprzeczności z zasadą Single Responsibility?
Ekspert informacyjny, Tell-Don't-Ask, iSRP są często wymieniane jako najlepsze praktyki. Ale myślę, że są w sprzeczności. Oto o czym mówię.
Kod, który faworyzuje SRP, ale narusza Tell-Don'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);
Kod, który faworyzuje Tell-Don't-Ask & Info-Expert, ale narusza SRP:
Customer bob = ...;
// Now Customer is doing more than just representing the domain concept of Customer,
// violates SRP
CustomerDTO dto = bob.toDTO();
Proszę, napisz do mnie, jak te praktyki mogą współistnieć w pokoju.
Definicje terminów,
Ekspert informacyjny: obiekty, które mają dane potrzebne do operacji, powinny obsługiwać operację.
Powiedz Don't Ask: nie pytaj o dane w celu wykonania pracy; powiedz obiektom, aby wykonały pracę.
Zasada pojedynczej odpowiedzialności: każdy obiekt powinien mieć ściśle określoną odpowiedzialność.