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ść.

questionAnswers(6)

yourAnswerToTheQuestion