Wie Schloss Monorail der Databinder / SmartDispatcherController zu binden, gegen die Typen enthalten Eigenschaften zu erhalten, die Schnittstellen sind?
-
08-07-2019 - |
Frage
Wir sind mit Schnittstellen Entitätsklassen in unserem Domain-Modell darzustellen. Wir haben konkrete Implementierungen von diesen durch LinqToSql verwenden. Wir haben eine Factory-Methode zu jeder LinqToSql Klasse hinzugefügt, die unsere Service-Schicht eine neue Einheit zu instanziiert verwendet (beachten Sie, wie Sie zu dem DataBind Attribute des Controllers gegen es zu tun).
Monorail-Standarddatabinder Implementierung ignoriert Eigenschaften, die als Schnittstellen definiert sind.
Im Idealfall wollen wir nicht unsere Daten-Layer-Klassen in Monorail instanziiert - der ganze Sinn der Schnittstellen ist diese Bedenken zu trennen.
Auch wir wollen nicht wirklich eine andere Gruppe von Nicht-LinqToSql konkreten Klassen, deren einzige Aufgabe zu erstellen, ist zwischen den Schichten zu übersetzen.
Es ist das Ende eines wirklich langen Tages hier; bitte kann jemand erbarmen und uns an den Teilen IDataBinder hinweisen, dass wir mit unseren eigenen Implementierungen oder verweisen auf andere Ansätze überlasten sollten wir versuchen könnte? ; -)
Lösung
Sie sollten bei IParameterBinder suchen. einen Blick auf ein Beitrag habe ich über das Thema geschrieben haben
Andere Tipps
Wie Ken zeigte, Ihre Idee mit einem benutzerdefinierten IParameterBinder umgesetzt werden könnte.
Eine Lösung wäre IOC zu verwenden:
- lösen konkrete Instanz des Formulars von ihm Schnittstelle ist
- dann IDataBinder verwenden, um die Instanz auf die Anfrage params zu binden
Ein anderer würde IDictionaryAdapter werden:
- erzeugen einen dto Proxy für Ihre Schnittstelle
- dann IDataBinder verwenden, um die dto Proxy-Instanz auf die Anfrage params zu binden
NB: zweite Option wird nicht funktionieren, wenn Schnittstelle:
- ist nicht öffentlich (hum)
- hat Methoden
- oder Ereignisse
- oder Nur-Lese-Eigenschaften
- oder setonly Eigenschaften
Zuletzt, ich bin nicht sicher, was das Problem ist konkrete Klasse in Controller Unterschrift aussetzt.
ich mich konkret in Controller verwenden Schnittstelle in der Anwendungsschicht Dienste definiert Implementierung erlaubt es mir Bedenken auf beiden Seiten getrennt zu haben:
- Steuerungsseite ist Http-Mapping und erste Ebene Datenvalidierung der Form / command
- Anwendungsschicht Dienste ist Business-Validierung und Verarbeitung der Form / command