Sollten die Eigenschaften in Data Transfer Object die Fremdschlüssel erweitern oder einfach deren Primärschlüssel verfügbar machen

StackOverflow https://stackoverflow.com/questions/5392093

Frage

Ich habe ein EmployeeDTO, das einen Mitarbeiterdatensatz in der Datenbank darstellt.Die Mitarbeitertabelle hat eine Beziehung zu einer Abteilung und eine 1-zu-viele-Beziehung zur Berechtigung.

In meinen Entitäten werden diese als vollständig erweiterte Abteilungseigenschaft und als Liste vollständig erweiterter Berechtigungsobjekte dargestellt.

Die Frage ist, ob das DTO über eine vollständig erweiterte DepartmentDTO-Eigenschaft einer DepartmentId verfügen soll.Sollte das DTO eine Liste der vollständig erweiterten PermissionDTO-Eigenschaften von List of PermissionId haben?

War es hilfreich?

Lösung

Wie alles im Design hängt es von Ihren Anforderungen ab.

  • Wenn Sie häufig sehen müssen und an untergeordnete Eigenschaften binden und Sie möchten um es so einfach wie möglich zu machen Entwickler, um Ihre DTOs zu verwenden, können Sie möchte explizite Factory-Methoden geben Sie haben die untergeordneten Eigenschaften vollständig erweitert.
  • Wenn Sie einen einfachen Code wünschen, tun Sie dies nicht Erweitern Sie die Fremdschlüsseleigenschaften und Lassen Sie einfach Entwickler das Kind bekommen Objekt / Sammlungen, die sie nach Schlüssel wollen nach Bedarf.

    Bei der Rekursion können Probleme auftreten. Erweitern Sie auch alle Fremdschlüsseleigenschaften des Abteilungsobjekts? Was ist, wenn in einer Unterklasse der Abteilung ein Verweis auf ein anderes EmployeeDTO vorhanden ist?

    Das Microsoft Entity Framework sowie andere gängige Business Object Frameworks behandeln dieses Konzept durch verzögertes Laden. Rufen Sie die vollständig erweiterte untergeordnete Eigenschaft nur ab, wenn dies vom Code gefordert wird. Dies ist wahrscheinlich die flexibelste Lösung, hat jedoch einen geringen Overhead / Lag, da untergeordnete Eigenschaften nicht im selben Datenbankaufruf wie das übergeordnete Objekt abgerufen werden können. Dies sind natürlich keine reinen DTOs.

Andere Tipps

Ja und Nein. Dies hängt vom Anruf ab und davon, ob Sie bei jedem Anruf alle zusätzlichen Eigenschaften benötigen.Dies kann auch von der von Ihnen verwendeten ORM-Technologie abhängen, die ein verzögertes Laden implementieren und Ihre Entscheidung beeinflussen kann (wenn Sie gerade Entitätsobjekte übergeben, obwohl dies nicht empfohlen ist).

Es ist üblich, ein Fall-DTO zu erstellen, das alle erforderlichen Eigenschaften und ein oder mehrere DTO-Objekte enthält, die mehr Funktionen verfügbar machen und für andere Methoden verwendet werden.Zum Beispiel habe ich eine BasicUser-Klasse, die nur UserName und DisplayName enthält, und ich habe User, der mehr enthält, einschließlich Permissions und erbt von `BasicUser.

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