Wenn ich ein Objekt aus einem benutzerdefinierten Modell Binder abrufen müssen, sollten mit der Service-Schicht, der Repository-Schicht das Bindemittel in Wechselwirkung treten, oder ...?

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

Frage

Wenn ich eine Klasse wie folgt aus:

public class Person
{
    public string firstName { get; set; }
    public string lastName { get; set; }
    public Pet myPet { get; set; }
}

Wenn ich einen benutzerdefinierten Modelbinder erstellen, wird die Post von meiner Form nicht in einem Haustier zu senden werden, ist es in Daten wie folgt senden würde: vorName: „myFirstName“ Nachname: „myLastName“ Mypet: „myPetsName“

Da der Name des Pet wird eingeleitet, und nicht das tatsächliche Pet Objekt, das Pet Objekt muss aus dem Modell Bindemittel abgerufen werden.

Meine Frage ist, sollte das Modell Bindemittel mit dem Service Layer interagieren, die Repository-Schicht, oder sollte es auch die Pet Abrufen werden? Das Problem mit dem Service Layer ist, dass ich offenbar keinen Zugriff auf Model haben, wenn der Dienst initialisiert wird: ((this.ModelState) ist mir ein Fehler)

_petService = new PetService(new ModelStateWrapper(this.ModelState));

Wenn ich das Modell Bindemittel brauchen eine Person Objekt zu erstellen, dann würde die Pet müssen irgendwie zugeordnet werden ... wie soll ich das tun?

War es hilfreich?

Lösung

Was ich tue, ist ein Ansicht / Präsentationsmodell verwenden, anstatt zu Business-Objekten zu binden. Denken Sie daran, dass Ihre Benutzer ungültige Werte eingeben können, und Sie müssen diese ungültigen Werte für den Benutzer wieder an, wenn der Aufforderung, ihre Fehler zu korrigieren. Aber Ihre „echte“ Business-Objekte wahrscheinlich nicht ungültige Werte akzeptieren. So ist das View-Modell für jede Benutzereingabe zulassen muss, auch Eingang der Business-Objekte werden nicht akzeptiert.

Das macht die Bindung einfach. Sie brauchen nicht einen Repository zu binden, zu schlagen, nur dann, wenn das Geschäftsobjekt mit (gültiger) Benutzereingabe zu aktualisieren.

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