MVP: più controller di pagina per una pagina?

0

Sto refactoring un'applicazione ASP.NET su larga scala scritta con WebForms che ha un design molto poco flessibile di view + code-behind. Per questo refactor, sto utilizzando MVP Architecture (Model-View-Presenter), che utilizza un approccio di Page Controller per pagine e controlli.

Scrivendo un controller per le pagine, ho affrontato un problema di riusabilità. Il seguente diagramma esprime un piccolo esempio che illustrerà il mio problema:

RegistrationViewèunavistaconunmodulocheconsenteaunutentediregistrarsi(introducendodaticomeNome,Indirizzo,Paese...equindimodificaquestidatiattraversoilcontroller).EditAddressViewrecuperaidatigiàesistentisull'utente,consentelamodificaequindimodificaidatisulmodello.

Comepuoivedere,cisonoalcunepartiincomuneneicontroller(inparticolare,lamemorizzazionedeidati).Vorreiriutilizzarelapartedelcodiceincuisonoarchiviatiidati,quindihopresoinconsiderazionetreopzioniperaffrontarequesto:

  • Creaunasuperclassecheincludailcodicedariutilizzare,quindifaiinmodocheicontrolloriereditinoquestaclasseeutilizzinol'algoritmodelnegozio.
  • Creauntipodilivello"libreria" (cioè UserManagerLibrary) che entrambi i controller utilizzerebbero e farebbe delle chiamate ad esso.
  • Implementare un sistema un po 'componente e creare controller che gestiscano questi "componenti". Questo diagramma illustra il mio approccio:

NOTA: CountryRetriever ottiene un elenco di paesi per popolare un menu a discesa.

In questo approccio, renderò le viste conformi a diverse interfacce, che, insieme, definiscono una vista. Quindi leghiamo ciascuna vista con diversi controller di pagina a seconda delle interfacce implementate dalle viste. In questo modo, penso che potrei facilmente creare nuove viste ed espandere le funzionalità di quelle esistenti (ad esempio, potrei espandere EditAddressView con funzionalità di eliminazione facendole implementare un'interfaccia IUserDelete).

Penso che questo approccio mi consenta di massimizzare la mia riusabilità del codice e il Principio di Responsabilità Unica in un'architettura MVP, tuttavia ho la sensazione di violare in qualche modo il pattern di Page-Controller e la sensazione che questo approccio possa avere un grande svantaggio in futuro per me (non lo so, è per questo che sto chiedendo se la mia soluzione è buona).

Qualcuno può illuminarmi su questo argomento?

Grazie

    
posta David Jiménez Martínez 01.04.2014 - 23:15
fonte

0 risposte

Leggi altre domande sui tag