Ich habe selbst damit gekämpft. Es gibt Fälle, in denen die Verwendung eines DTO in der Gegenwart sinnvoll ist. Angenommen, ich möchte eine Dropdown-Liste der Unternehmen in meinem System anzeigen und benötige deren ID, um den Wert zu binden.
Anstatt ein CompanyObject zu laden, das möglicherweise Verweise auf Abonnements enthält oder wer weiß was noch, könnte ich ein DTO mit dem Namen und der ID zurücksenden. Dies ist meiner Meinung nach eine gute Verwendung.
Nehmen Sie nun ein anderes Beispiel. Ich habe ein Objekt, das eine Schätzung darstellt. Diese Schätzung kann aus Arbeit, Ausrüstung usw. bestehen. Es kann viele vom Benutzer definierte Berechnungen enthalten, die alle diese Elemente aufnehmen und zusammenfassen (jede Schätzung kann bei verschiedenen Typen unterschiedlich sein von Berechnungen). Warum sollte ich dieses Objekt zweimal modellieren müssen? Warum kann ich meine Benutzeroberfläche nicht einfach über die Berechnungen aufzählen und anzeigen lassen?
Im Allgemeinen verwende ich keine DTOs, um meine Domänenschicht von meiner Benutzeroberfläche zu isolieren. Ich verwende sie, um meine Domänenschicht von einer Grenze zu isolieren, die außerhalb meiner Kontrolle liegt. Die Idee, dass jemand Navigationsinformationen in sein Geschäftsobjekt einfügt, ist lächerlich. Verunreinigen Sie Ihr Geschäftsobjekt nicht.
Die Idee, dass jemand sein Geschäftsobjekt validieren würde? Nun, ich sage, das ist eine gute Sache. Ihre Benutzeroberfläche sollte nicht allein für die Validierung Ihrer Geschäftsobjekte verantwortlich sein. Ihre Geschäftsschicht MUSS ihre eigene Validierung durchführen.
Warum sollten Sie UI-Generierungscode in ein Geschäftsobjekt einfügen? In meinem Fall habe ich separate Objekte, die den UI-Code separat von der UI generieren. Ich habe sperate Objekte, die meine Geschäftsobjekte in XML rendern. Die Idee, dass Sie Ihre Ebenen trennen müssen, um diese Art von Kontamination zu verhindern, ist mir so fremd, denn warum sollten Sie überhaupt HTML-Generierungscode in ein Geschäftsobjekt einfügen ...
Bearbeiten
Wie ich ein bisschen mehr denke, gibt es Fälle, in denen UI-Informationen in die Domänenschicht gehören könnten. Dies könnte die so genannte Domänenschicht trüben, aber ich habe an einer mandantenfähigen Anwendung gearbeitet, die sich sowohl im Erscheinungsbild der Benutzeroberfläche als auch im funktionalen Workflow sehr unterschiedlich verhält. Abhängig von verschiedenen Faktoren. In diesem Fall hatten wir ein Domänenmodell, das die Mandanten und ihre Konfiguration darstellte. Ihre Konfiguration enthielt zufällig Informationen zur Benutzeroberfläche (z. B. Beschriftungen für generische Felder).
Wenn ich meine Objekte so gestalten musste, dass sie dauerhaft sind, sollte ich sie dann auch duplizieren müssen? Denken Sie daran, wenn Sie jetzt ein neues Feld hinzufügen möchten, haben Sie zwei Stellen, an denen Sie es hinzufügen können. Vielleicht wirft dies eine andere Frage auf, wenn Sie DDD verwenden. Sind alle Objekte Objekte der persistierten Entitäten? Ich weiß in meinem Beispiel, dass sie es waren.