Frage

Wie implementiert man DTOs am ​​besten?

Nach meinem Verständnis sind sie eine Möglichkeit, Daten zwischen Objekten zu übertragen.Beispielsweise könnten Sie in einer ASP.Net-App ein DTO verwenden, um Daten vom Code-Behind an die Komponente der Geschäftslogikschicht zu senden.

Was ist mit anderen Optionen, wie beispielsweise dem einfachen Senden der Daten als Methodenparameter?(Wäre dies in Asces am einfachsten, wo weniger Daten zu senden sind?)

Was ist mit einer statischen Klasse, die nur Daten enthält, auf die von anderen Objekten verwiesen werden kann (eine Art globale Assembly-Datenspeicherklasse)?(Unterbricht dies die Kapselung zu sehr?)

Wie wäre es mit einem einzigen generischen DTO, das für jede Übertragung verwendet wird?Die Verwendung ist möglicherweise etwas aufwändiger, verringert jedoch die Anzahl der zum Arbeiten erforderlichen Klassen (reduziert die Unordnung der Objekte).

Vielen Dank, dass Sie uns Ihre Gedanken mitgeteilt haben.

War es hilfreich?

Lösung 6

Danke für all die hilfreichen Ideen ...

Eine Zusammenfassung + mein nehmen auf diese:

- Wenn es eine kleine Menge von Daten und nicht zu viele Orte zu bewegen, um es zu bewegen, können regelmäßige Parameter ausreichen

-. Wenn es eine Menge von Daten und / oder viele Objekte, die es zu bewegen, um eine speziell erstellte Objekt sein kann am einfachsten (DTO-Objekt)

- Ein globales Datenobjekt, das (nicht bestanden) durch verschiedene Objekte verwiesen werden kann scheint auf ... aber verpönt zu sein, frage ich mich, ob es nicht manchmal ein Platz für sie in einem bestimmten Teilsystem ? Es ist ein Weg, um die Datenmenge Gang zu reduzieren. Es spielt schiebt die Grenzen der „guter Kapselung“, aber in bestimmten Fällen innerhalb bestimmter Schichten, vielleicht ist es die Einfachheit auf eine particluar assemply von Klassen hinzufügen könnte. So würde eine Klasse-Level-Kapselung verlieren, könnte aber noch Montageebene Verkapselung hat.

Andere Tipps

Ich habe gebrauchter DTO zu:

  • Pass von Daten zwischen der Benutzeroberfläche und Service-Ebene ist eine Standard-3-Tier-Anwendung.
  • Pass-Daten als Methodenparameter eine große Anzahl (5+) von Parametern verkapseln.

Der Ansatz ‚eine DTO sie alle knechten‘ chaotisch könnte, beste Wette ist, mit spezifischen DTO für jedes Merkmal / Merkmalsgruppe zu gehen, kümmert sich um sie zu nennen, so dass sie leicht sind zwischen den Merkmalen übereinstimmen, sie sind verwendet in.

Ich habe noch nie statisch DTO in der Art und Weise Sie erwähnen gesehen und würde zögern Singletons zu schaffen DTO wie Sie beschreiben.

Ich halte es einfach und eine DTO-Klasse zu einer db-Tabelle zuordnen. Sie sind leicht, damit ich sie überall senden kann, einschließlich über den Draht.

Ich wünschte, es könnte so einfach sein.Obwohl DTO aufgrund der Netzwerkverteilungsebenen eines Systems entstanden ist, kann es zu einer ganzen Reihe von Problemen kommen, wenn Domänenobjekte an die Ansichtsebenen zurückgegeben werden.Hier sind einige davon:

1. Durch die Bereitstellung von Domänenobjekten auf der Ansichtsebene werden Ansichten auf die Struktur von Domänenobjekten aufmerksam, sodass die Ansicht einige Annahmen darüber treffen kann, wie verwandte Objekte verfügbar sind.Wenn beispielsweise ein Domänenobjekt „Person“ an eine Ansicht zurückgegeben würde, an die es „gebunden“ ist, und an eine andere Ansicht „Adresse“ der Person gebunden werden soll, besteht für die Anwendungsebene die Tendenz, eine ähnliche Semantik zu verwenden person.getAddresse(), was fehlschlagen würde, da zu diesem Zeitpunkt das Adressdomänenobjekt möglicherweise noch nicht geladen wurde.Da Domänenobjekte für Ansichtsebenen verfügbar werden, können Ansichten im Wesentlichen immer Annahmen darüber treffen, wie Daten verfügbar gemacht werden.

2.) Wenn Domänenobjekte an Ansichten gebunden sind (insbesondere bei Thick-Clients), besteht immer die Tendenz, dass sich ansichtszentrierte Logik in diese Objekte einschleicht, wodurch sie logisch beschädigt werden.

Grundsätzlich habe ich aus meiner Erfahrung herausgefunden, dass die Bereitstellung von Domänenobjekten für Ansichten zu Architekturproblemen führt, aber es gibt auch Probleme bei der Verwendung von DTOs, da die Verwendung von DTOs zusätzliche Arbeit in Bezug auf die Erstellung von Assemblern (DTO für Domänenobjekte und umgekehrt) und die Verbreitung von Assemblern mit sich bringt Analoge Objekte wie das Patientendomänenobjekt, das Patienten-DTO und möglicherweise die an die Ansicht gebundene Patienten-Bean.

Offensichtlich gibt es hierfür keine richtigen Antworten, insbesondere in einem Thick-Client-System.

Ich habe mir diese kurze und nicht vollständige, aber wahre Antwort auf das DTO-Klischee ausgeliehen von:
http://www.theserverside.com/discussions/thread.tss?thread_id=32389#160505

Ich denke, es ist ziemlich üblich DataSet / Datatable als verwenden „ein DTO, sie alle zu regieren“. Es ist leicht, sie aus der Datenbank zu laden, und bleiben die Werte zurück, und sie können leicht serialisiert werden.

Ich würde auf jeden Fall sagen, dass sie mehr Mühe zu bedienen sind. Sie machen alle Leitungen bieten, aber die Programmierung gegen sie ist ein Schmerz (viele Casting, null Kontrollen, magische Saiten, usw.). Es wäre interessant, einen guten Satz von Erweiterungsmethoden, um zu sehen, mit ihnen ein wenig mehr „natürlich“ zu machen, zu arbeiten.

DTOs werden verwendet, um Daten über den Draht zu senden, nicht zwischen den Objekten. Überprüfen Sie diesen Beitrag aus: POCO vs DTO

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top