Sind Information Expert & Tell nicht im Widerspruch zum Grundsatz der Einzelverantwortung?

Informationsexperte, Tell-Don't-Ask, undSRP werden oft gemeinsam als Best Practices bezeichnet. Aber ich denke, sie sind uneins. Hier ist, wovon ich rede.

Code, der SRP bevorzugt, aber Tell-Don't-Ask & Info-Expert verletzt:

Customer bob = ...;
// TransferObjectFactory has to use Customer's accessors to do its work, 
// violates Tell Don't Ask
CustomerDTO dto = TransferObjectFactory.createFrom(bob); 

Code, der Tell-Don't-Ask & Info-Expert bevorzugt, aber SRP verletzt:

Customer bob = ...;
// Now Customer is doing more than just representing the domain concept of Customer,
// violates SRP
CustomerDTO dto = bob.toDTO();

Bitte erläutern Sie mir, wie diese Praktiken friedlich nebeneinander existieren können.

Definitionen der Begriffe,

Informationsexperte: Objekte mit den für eine Operation erforderlichen Daten sollten die Operation hosten.

Tell Don't Ask: Fragen Sie keine Objekte nach Daten, um arbeiten zu können. Sagen Sie den Objekten, sie sollen die Arbeit erledigen.

Prinzip der Einzelverantwortung: Jedes Objekt sollte eine eng definierte Verantwortung haben.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage