2017-06-05 2 views
0

Ich habe Api-Projekt, Business-Projekt und Datenbank-Kontext.ViewModels oder RequestModels im WebApi-Projekt und zusätzliche Ebene der Zuordnung mit AutoMapper

Ich denke an Design wie folgt aus:

  • Viewmodels in api Projekt und Zuordnungen mit AutoMapper. Automapper wird hier Viewmodel zu Business dto Modell
  • dto Modelle in Business-Projekt und Zuordnungen mit AutoMapper. Automapper wird hier dto-Modell zu Entitätsmodell (Datenbank) zuordnen.

Frage 1: Sollte ich OperationViewModel oder OperationRequestModel (ResponseModel) in einem API-Projekt verwenden?

Frage 2: Ist eine zusätzliche Zuordnung zwischen Viewmodel und dto-Modell-Overkill, oder ist es eine gute Praxis, diese Bedenken zu trennen und noch mehr zu entkoppeln, oder sollte ich DTO-Modelle mit Entity-Modellen abbilden und diese DTO-Modelle in einem API-Projekt verwenden?

Antwort

1

Zunächst möchte ich Ihnen gratulieren, "es zu bekommen". So viele Projekte, die ich sehe, haben den Datenbankzugriff in der UI-Ebene !!

Am Anfang mag es sein, dass verschiedene (aber fast identische) Klassen für ViewModel-, Business- und Daten-Layer ein Problem sind, aber hier ist AutoMapper brillant. Meistens müssen Sie nichts tun und es funktioniert einfach.

Sobald Ihr Code ein bisschen mehr Fleisch auf den Knochen bekommt, werden Sie leichter Datenbankfelder hinzufügen können, ohne sich um die Auswirkungen auf Ihr Ansichtsmodell kümmern zu müssen, und um Ansichtsmodelle zu erstellen, die genau der Ansicht entsprechen. ohne sich um Datenbankfelder kümmern zu müssen. Win-Win. Ich würde auch ein separates View-Modell für jede Funktion erstellen, auch wenn sie identisch sind (verwende Vererbung, falls erforderlich, aber stelle sicher, dass du jedes Mal eine andere Klasse hast).

IMO sollten die Modelle von der Schicht freigelegt werden, die sie erzeugen und verbraucht, so dass das Ansichtsmodell sollte XXXViewModel haben, die businesss Schicht XXXDto usw.

public IndexViewModel Index() 
{ 
    var vm = new IndexViewModel() 
    { 
     Items = _mapper.map<List<Item>>(_service.GetSomeData()) 
    }; 
    return vm; 
} 
public GetViewModel Get(int id) 
{ 
    var vm = _mapper.Map<GetViewModel>(_service.get(id)); 
    return vm; 
} 
+0

großer Dank, neu zu erstellen, wenn Ansichtsmodell ähnliche Felder (für Beispiel für das Hinzufügen und Aktualisieren in crud) ist gut oder schlecht ist auch Dilemma. zum Beispiel, wenn wir einige Felder bei der Erstellung automatisch speichern (nicht über den Client), und dann beim Aktualisieren müssen wir sie über den Client aktualisieren. Daher denke ich, dass ich die Duplizierung (Trennung der Viewmodles) von der Vererbung bevorzuge, aber ich denke, es ist eine persönliche Meinung - schaut euch dieses https://stackoverflow.com/questions/6954102/asp-net-mvc-architecture-viewmodel-by an -composition-Vererbung-oder-duplizierung –

Verwandte Themen