Come fare in modo che DataBinder / SmartDispatcherController di Castle MonoRail si associ a tipi contenenti proprietà che sono interfacce?

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

Domanda

Stiamo utilizzando le interfacce per rappresentare le classi di entità nel nostro modello di dominio. Abbiamo implementazioni concrete di questi in virtù dell'utilizzo di LinqToSql. Abbiamo aggiunto un metodo factory a ciascuna classe LinqToSql che il nostro livello di servizio utilizza per creare un'istanza di una nuova entità (nota; al contrario dell'attributo DataBind del controller che lo fa).

L'implementazione DataBinder predefinita di MonoRail ignorerà le proprietà definite come interfacce.

Idealmente, non vogliamo creare un'istanza delle nostre classi di livello dati in MonoRail: il punto centrale delle interfacce è separare queste preoccupazioni.

Inoltre, non vogliamo davvero creare un altro set di classi concrete non LinqToSql il cui unico compito è tradurre tra livelli.

È la fine di una lunga giornata davvero qui; per favore qualcuno può avere pietà e indicarci le parti di IDataBinder che dovremmo sovraccaricare con le nostre implementazioni o suggerire altri approcci che potremmo tentare? ; -)

È stato utile?

Soluzione

Dovresti guardare IParameterBinder. dai un'occhiata a un post che ho scritto sull'argomento

Altri suggerimenti

Come ha sottolineato Ken, la tua idea potrebbe essere implementata con un IParameterBinder personalizzato.

Una soluzione sarebbe quella di usare IOC:

  • risolve istanza concreta del modulo dalla sua interfaccia
  • quindi utilizza IDataBinder per associare l'istanza ai parametri della richiesta

Un altro userebbe IDictionaryAdapter:

  • genera un proxy dto per la tua interfaccia
  • quindi utilizzare IDataBinder per associare l'istanza del proxy dto ai parametri della richiesta

NB: la seconda opzione non funzionerà se interfaccia:

  • non è pubblico (ronzio)
  • ha metodi
  • o eventi
  • o proprietà di sola lettura
  • o proprietà setonly

Infine, non sono sicuro di quale sia il problema che espone la classe concreta nella firma del controller.

Io stesso utilizzo una forma concreta nei controller che implementano l'interfaccia definita nei servizi a livello di applicazione, mi consente di avere preoccupazioni separate su entrambi i lati:

  • lato controller è la mappatura HTTP e la convalida dei dati di primo livello del modulo / comando
  • i servizi a livello di applicazione sono la convalida commerciale e l'elaborazione del modulo / comando
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top