418 Stimmen

Was ist ein Datenübertragungsobjekt (DTO)?

Was ist ein Datenübertragungsobjekt?

In MVC sind die Modellklassen DTO, und wenn nicht, was sind die Unterschiede und brauchen wir beide?

1voto

mostafa kazemi Punkte 228

Datenübertragungsobjekt (DTO) beschreibt "ein Objekt, das Daten überträgt zwischen Prozessen" (Wikipedia) oder ein "Objekt, das dazu dient, Daten zu kapseln, und sie von einem Subsystem einer Anwendung an ein anderes zu senden" (Stack Overflow Antwort).

1voto

RBJ Punkte 120

DefN

Ein DTO ist ein hartkodiert Datenmodell. Es löst lediglich das Problem der Modellierung eines Datensatzes, der von einem hartkodiert Produktionsprozess, bei dem alle Felder zur Kompilierzeit bekannt sind und daher über stark typisierte Eigenschaften zugänglich sind.

Im Gegensatz dazu löst ein dynamisches Modell oder eine "Eigenschaftstasche" das Problem der Modellierung eines Datensatzes, wenn der Produktionsprozess zur Laufzeit erstellt wird.

Der Cvar

Ein DTO kann mit Feldern oder Eigenschaften modelliert werden, aber jemand hat einen sehr nützlichen Datencontainer namens Cvar erfunden. Er ist ein Verweis auf einen Wert. Wenn ein DTO mit dem modelliert wird, was ich als Bezugseigenschaften können Module so konfiguriert werden, dass sie sich den Heap-Speicher teilen und so gemeinsam daran arbeiten. Dadurch entfallen die Parameterübergabe und die O2O-Kommunikation in Ihrem Code vollständig. Mit anderen Worten, DTOs mit Referenzeigenschaften ermöglichen es dem Code, eine Null-Kopplung zu erreichen .

    class Cvar { ... }

    class Cvar<T> : Cvar
    {
        public T Value { get; set; }
    }

    class MyDTO
    {
        public Cvar<int> X { get; set; }
        public Cvar<int> Y { get; set; }
        public Cvar<string> mutableString { get; set; } // >;)
    }

Quelle: http://www.powersemantics.com/

Dynamische DTOs sind eine notwendige Komponente für dynamische Software. Um einen dynamischen Prozess zu instanziieren, besteht ein Compilerschritt darin, jede Maschine im Skript an die Referenzeigenschaften zu binden, die das Skript definiert. Ein dynamisches DTO wird durch Hinzufügen der Cvars zu einer Sammlung erstellt.

    // a dynamic DTO
    class CvarRegistry : Dictionary<string, Cvar> { }

Inhaltliche Schwerpunkte

Hinweis: Da Wix die Verwendung von DTOs für die Organisation von Parametern als "Anti-Pattern" bezeichnet hat, werde ich eine verbindliche Stellungnahme abgeben.

    return View(model);  // MVC disagrees

Meine kollaborative Architektur ersetzt die Entwurfsmuster. Siehe auch meine Webartikel.

Die Parameter ermöglichen die unmittelbare Steuerung einer Stapelrahmenmaschine. Wenn Sie eine kontinuierliche Steuerung verwenden und daher keine sofortige Steuerung benötigen, brauchen Ihre Module keine Parameter. Meine Architektur hat keine. Die prozessbegleitende Konfiguration von Maschinen (Methoden) erhöht die Komplexität, aber auch den Wert (Leistung), wenn die Parameter Werttypen sind. Allerdings führen Parameter vom Typ Referenz dazu, dass der Consumer ohnehin Cache-Misses verursacht, um die Werte aus dem Heap zu holen - daher konfigurieren Sie den Consumer einfach mit Referenzeigenschaften. Ein Fakt aus dem Maschinenbau: Die Verwendung von Parametern ist eine Art Voroptimierung, denn die Verarbeitung (Herstellung von Komponenten) selbst ist Verschwendung. Weitere Informationen finden Sie in meinem W-Artikel. http://www.powersemantics.com/w.html .

Fowler und Co. könnten die Vorteile von DTOs außerhalb der verteilten Architektur erkennen, wenn sie jemals eine andere Architektur kennengelernt hätten. Programmierer kennen nur verteilte Systeme. Integrierte kollaborative Systeme (auch bekannt als Produktion oder Fertigung) sind etwas, das ich als meine eigene Architektur beanspruchen musste, weil ich der erste bin, der Code auf diese Weise schreibt.

Manche halten das DTO für ein anämisches Domänenmodell, d.h. es fehlt ihm an Funktionalität, aber das setzt voraus, dass ein Objekt die Daten besitzen muss, mit denen es interagiert. Dieses konzeptionelle Modell zwingt Sie dazu, die Daten zwischen den Objekten zu liefern, was das Modell für verteilte Verarbeitung ist. In einer Fertigungsstraße kann jedoch jeder Schritt auf das Endprodukt zugreifen und es verändern, ohne es zu besitzen oder zu kontrollieren. Das ist der Unterschied zwischen verteilter und integrierter Verarbeitung. In der Fertigung wird das Produkt von Betrieb und Logistik getrennt.

Es ist an sich nichts Falsches daran, die Verarbeitung als einen Haufen nutzloser Büroangestellter zu modellieren, die sich gegenseitig Arbeit per E-Mail schicken, ohne einen E-Mail-Pfad zu führen, abgesehen von der zusätzlichen Arbeit und den Kopfschmerzen, die dies bei der Handhabung von Logistik- und Rückgabeproblemen verursacht. Ein richtig modellierter verteilter Prozess fügt dem Produkt ein Dokument (aktives Routing) bei, in dem beschrieben wird, aus welchen Vorgängen es stammt und wohin es gehen wird. Der aktive Arbeitsplan ist eine Kopie des Ausgangsarbeitsplans des Prozesses, der vor Beginn des Prozesses erstellt wird. Im Falle eines Defekts oder einer anderen dringenden Änderung wird der aktive Arbeitsplan so geändert, dass er die Vorgangsschritte enthält, an die das Produkt weitergeleitet wird. Auf diese Weise wird die gesamte Arbeit berücksichtigt, die in die Produktion eingeflossen ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X