Information-Expert, Tell-Don't-Ask und SRP werden oft gemeinsam als bewährte Praktiken genannt. Aber ich denke, sie stehen im Widerspruch zueinander. Hier ist, worum es mir geht.
Code, der SRP bevorzugt, aber gegen Tell-Don't-Ask & Info-Expert verstößt:
Customer bob = ...;
// TransferObjectFactory muss die Accessoren von Customer verwenden, um ihre Arbeit zu erledigen,
// verstößt gegen Tell Don't Ask
CustomerDTO dto = TransferObjectFactory.createFrom(bob);
Code, der Tell-Don't-Ask & Info-Expert bevorzugt, aber gegen SRP verstößt:
Customer bob = ...;
// Jetzt macht der Kunde mehr als nur das Domain-Konzept des Kunden darzustellen,
// verstößt gegen SRP
CustomerDTO dto = bob.toDTO();
Bitte erläutern Sie mir, wie diese Praktiken friedlich nebeneinander existieren können.
Definitionen der Begriffe:
-
Information Expert: Objekte, die die für eine Operation benötigten Daten haben, sollten die Operation hosten.
-
Tell Don't Ask: Fordern Sie Objekte nicht nach Daten an, um Arbeit zu erledigen; sagen Sie den Objekten, die Arbeit zu erledigen.
-
Single Responsibility Principle: Jedes Objekt sollte eine klar definierte Verantwortung haben.
0 Stimmen
Eine kleine Vorstellung der Begriffe, die du verwendest, hätte hilfreich sein können.
3 Stimmen
Die kurze Antwort ist ja ... die lange Antwort ist, dass manchmal Leute (Akademiker) vergessen, dass Programmierung noch keine perfekte Wissenschaft ist ... wir haben keine Sprache, die sauber genug ist, um all diese Prinzipien zu erfüllen. Brechen Sie das Prinzip, das am sinnvollsten ist.
1 Stimmen
Dein zweites Beispiel verstößt zwar gegen das SRP, ist aber kein wirklich gutes Beispiel für Tell Don't Ask.