Wir bauen ein Web-App AngularJS, C#, ASP.Net Web-API und Fluent NHibernate. Wir haben entschieden, DTOs zu verwenden, um Daten in die Präsentationsschicht (Winkelansichten) zu übertragen. Ich hatte einige Zweifel bezüglich der allgemeinen Strukturierung und Benennung von DTOs. Hier ist ein Beispiel, um mein Szenario zu veranschaulichen. Lets sagen, dass ich einen Domain-Entität namens Customer haben, die wie folgt aussieht: JetztDTO Namenskonventionen, Modellierung und Vererbung
public class Customer
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Address Address { get; set; }
public virtual ICollection<Account> Accounts { get; set; }
}
in meine Ansichten/Präsentationsschicht ich verschiedene Varianten von Kunden wie abrufen müssen:
1) Nur Identifikation und Name 2) ID, Name und Anschrift 3) Id, Name, Adresse und Konten
ich eine Reihe von DTOs erstellt haben, um dies zu erreichen:
public class CustomerEntry
{
public int Id { get; set; }
public string Name { get; set; }
}
public class CustomerWithAddress : CustomerEntry
{
public AddressDetails Address { get; set; }
}
public class CustomerWithAddressAndAccounts : CustomerWithAddress
{
public ICollection<AccountDetails> Accounts { get; set; }
}
AddressDetails und AccountDetails sind DTOs, die alle Eigenschaften ihrer entsprechenden Domain-Entitäten haben.
Diese für die Abfrage und Datenabfragen gut funktioniert; Die Frage ist, was verwende ich für Einsätze und Updates. Bei der Erstellung eines neuen Kundendatensatzes sind Name und Adresse obligatorisch und Konten sind optional. Also brauche ich ein Objekt mit allen Kundeneigenschaften. Daraus ergibt sich die Verwirrung:
1) Was kann ich für Einsatz und Updates? Das CustomerWithAddressAndAccounts-DTO enthält alles, aber der Name scheint ein wenig umständlich zu sein, um für das Einfügen/Aktualisieren verwendet zu werden.
2) erstelle ich einen anderen DTO .. wenn ich tun würde, dass keine Duplizierung als die neue DTO wird genau wie CustomerWithAddressAndAccounts sein?
3) Last but not least, ist der DTO Erbe strcuture oben beschrieben scheint wie eine gute Passform für die Anforderung? Gibt es andere Möglichkeiten, dies zu modellieren?
Ich habe durch andere Beiträge zu diesem Thema gegangen, kann aber nicht viel Fortschritte machen. Eine Sache, die ich abhole, war, das Suffix "DTO" in den Klassennamen zu vermeiden. Ich denke, es ist ein bisschen überflüssig.
Würde gerne Ihre Gedanken
Dank hören
Vielen Dank für Ihre Antwort. Eine der Motivationen für die Verwendung mehrerer DTO-Klassen bestand darin, etwas expressiver zu sein, um zu definieren, wofür das DTO verwendet wird. Wenn Sie nur die ID und den Namen benötigen, sollten Sie wirklich das vollwertige CustomerEntryDTO (das Sie beschrieben haben) über die Leitung senden? – Sennin
@Sennin Ich habe meine Antwort basierend auf deinem Kommentar bearbeitet, aber ich denke meine Antwort wäre für dich noch unvollständig. Möglicherweise werde ich es später bearbeiten, um mehr zu Ihrem obigen Kommentar hinzuzufügen. – VS1
@Sennin pls siehe meine Bearbeitung 2. – VS1