Die Ebenenstruktur:
- (Abhängigkeiten: Anwendung und Infrastruktur nur für DI-Zwecke)
Code: Select all
API - (Abhängigkeiten: Anwendung)
Code: Select all
Infrastructure - (Abhängigkeiten: Domäne)
Code: Select all
Application - (unabhängig)
Code: Select all
Domain
Problem 1: Angesichts der Tatsache, dass die Vertragsebene unabhängig ist, ist die Arbeit mit Dateien die Hölle. Ich kann IFormFile nicht in Anforderungs-DTOs verwenden, da die Ebene selbst eine einfache Klassenbibliothek ist.
Problem 2: Die Vertragsebene kann nicht von der Domänenebene abhängen, da sie die Domänenlogik offenlegen könnte, was zu einem DRY-Problem führen könnte. Ich habe eine einfache Sex-Aufzählung in meiner Domänenschicht:
Code: Select all
namespace MovieStore.Domain.Users;
public enum Sex
{
Male = 0,
Female = 1
}
Problem 3: Es ist sinnvoll, die API-Anforderungs- und die CQRS-Befehlsobjekte der Anwendungsschicht zu unterscheiden, da die API eine Datei möglicherweise als IFormFile akzeptiert, während der Befehl der Anwendungsebene dies erwartet Streamen. Ich bin mir nicht sicher, ob die Trennung der API- und Anwendungsantwortobjekte sinnvoll ist, da sie größtenteils identisch sind (ich kann mir nicht vorstellen, dass sie unterschiedlich sind). Für die Duplizierung ist eine erneute Zuordnung erforderlich. Lohnt es sich?
Eine Vertragstrennung hat mehr Nachteile als Vorteile. Ich denke, dass es viel einfacher ist, Anfragen/Antworten in der API-Schicht zu verwalten, aber es löst Problem Nr. 3 nicht, weil die Anwendungsschicht die API-Schicht-Antwort-DTOs nicht sieht, was zu Duplikaten führt.
Mobile version