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.