Organizzazione dei pacchetti con pattern di progettazione MVC [duplicato]

7

Ho iniziato a programmare parecchio e non riesco ancora a decidere quali di questi pacchetti siano i migliori:

package1
  Class1Controller
  Class1Model
  Class1View
package2
  Class2Controller
  Class2Model
  Class2View

o

controller
  Class1Controller
  Class2Contoller
model
  Class1Model
  Class2Model
view
  Class1View
  Class2View

In altre parole, è meglio applicare il modello di progettazione MVC alle classi o ai pacchetti? C'è qualche ragione per scegliere l'una rispetto all'altra?

La mia domanda è indipendente dalla lingua, ma sono principalmente un programmatore Java, se fa alcuna differenza.

    
posta SteeveDroz 21.10.2011 - 10:22
fonte

2 risposte

3

Risposta breve: dipende da: -)

Normalmente raccomanderei il tuo primo suggerimento perché metti cose in un pacchetto che appartiene insieme. Nel secondo esempio Class1Controller e Class2Controller potrebbero non avere nulla in comune tranne che sono controller.

Ma come ho detto all'inizio, potrebbe esserci un motivo per usare il secondo modello invece del primo.

    
risposta data 21.10.2011 - 10:39
fonte
4

In generale dovresti dividere la tua applicazione in pacchetti funzionali piuttosto che strutturali. Ad esempio, quale è l'eccezione aziendale ("Ordine non trovato", ad esempio) in un pacchetto di eccezioni generali?

Dovresti avere un'elevata coesione all'interno dei pacchetti. Preferirei dividere un singolo pacchetto in più strati che dividerli per il loro scopo strutturale / architettonico. Ad esempio, credo che il modello meriti un proprio livello con tutte le sue necessità. Quindi, per il modello specifico, avrei un livello applicativo con controller e possibilmente un altro layer intercambiabile con viste, il tutto legato con interfacce ben definite.

La tua seconda opzione porta chiaramente ad un'architettura in cui molte parti della tua applicazione avranno dipendenze non necessarie e indesiderate. Questo limiterà le tue opzioni di flessibilità ed estensibilità. Pensaci: ogni volta che cambi una singola interfaccia nel pacchetto del modello, tutti i pacchetti che usano questo pacchetto devono avere anche una dipendenza aggiornata.

In breve, strutturerei un'applicazione di base come questa:

package1
   model        (subpackage/assembly, contains the business logic)
   application  (subpackage/assembly, contains controllers etc)
   presentation (subpackage/assembly, contains views etc.)
   interfaces   (optional, encapsulates well defined interfaces 
                  so the layers can communicate and for Dependency Injection)

I livelli possono essere spazi dei nomi fisicamente distinti. La distinzione fisica (la compilazione di diverse DLL) aiuta davvero a mantenere pulita la tua architettura, la parte delle interfacce può essere un gatekeeper.

Sappi anche che il termine modello può significare cose diverse. Il modello può fare riferimento alla logica aziendale (in OOP principalmente un modello a oggetti del tuo dominio aziendale) o a un singolo "modello di presentazione" (a questo punto non mi riferisco al modello di Fowler al 100%, ma piuttosto alle miriadi di varianti MVC in generale) ". Mentre il primo appartiene veramente al pacchetto del modello, quest'ultimo appartiene al livello dell'applicazione. Mi piace molto MVC quando il controller chiama solo la business logic e il livello di persistenza. La maggior parte delle volte non ha bisogno di un modello separato.

    
risposta data 21.10.2011 - 14:24
fonte

Leggi altre domande sui tag