Domanda

Finisco con circa 20 parametri diversi nel costruttore della classe del modello, uno per ogni servizio? È normale o indica che qualcosa è spento.

È stato utile?

Soluzione

Penso, categoricamente, che il tuo controller stia interagendo con troppi servizi. Non ho visto il tuo codice - quindi vado fuori dai presupposti - ma mi sembra che il tuo controller stia componendo la logica aziendale chiamando numerosi "piccoli" servizi, anziché attingere a un minor numero di "più grandi" servizi che compongono la logica aziendale dai servizi più piccoli.

Dai un'occhiata in giro per informazioni su " servizi di orchestrazione " vs "entità" o "capacità" servizi e vedrai cosa intendo. Se crei servizi di orchestrazione che forniscono ai controller la logica richiesta, la tua architettura viene migliorata perché i controller non dovrebbero contenere alcuna logica aziendale.

Penso davvero che il numero di servizi che consumi sia il problema qui. I contenitori IoC possono aiutare in qualche modo a risolvere il modo in cui si associano i tipi ai parametri di iniezione, ecc., Ma penso che il problema sia la tua architettura a questo punto.

Altri suggerimenti

Potresti provare a consolidare alcuni servizi o pensare al refactoring delle parti di visualizzazione del controller in componenti con ambito più piccolo. Inoltre, un framework di stile di iniezione di dipendenza come Spring può aiutare con cose come questa.

Anche se non conosco la tua configurazione. 20 sembra un po 'troppo, penso che tu vada contro l'SRP (Principio della responsabilità singola). Ma dal momento che non riesco a vedere il tuo codice è impossibile dirlo. Se hai davvero bisogno di tutti questi servizi in quella classe di un modello, allora forse devi metterli in una classe di fabbrica e usarli come parametro.

È difficile dare una buona risposta al riguardo poiché non conosciamo il tuo dominio.

Come ha detto @Matt, un'iniezione di dipendenza potrebbe aiutarti qui e sprint.NET è buono e ce ne sono molti altri.

Visto in particolare il tuo MVP, dovresti almeno guardare Ent Lib 4.1 che ora ha Unity , la versione di Microsoft su DI. Il loro codeplex è probabilmente un buon punto di partenza se questo è nuovo.

Ci sono anche fabbriche di software che si integrano con Visual Studio e danno strumenti per la creazione di MVP per siti Web come servizi Web o collegati. Anche questi provengono da schemi e pratiche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top