Dove mettere la logica aziendale nella progettazione MVC?

42

Ho creato una semplice applicazione Java MVC che aggiunge record attraverso i moduli dati a un database.

La mia app raccoglie i dati, li convalida e li archivia. Questo perché i dati vengono acquisiti online da diversi utenti. i dati sono per lo più di natura numerica.

Ora sui dati numerici memorizzati nel database (server SQL), voglio che la mia app esegua calcoli e mostri i risultati. L'utente non è interessato a come sono fatti i calcoli, quindi devono essere incapsulati. L'utente deve essere in grado di visualizzare solo i dati calcolati semplici (ad esempio, Dati colonna A meno B Dati colonna divisi per dati colonna C). So come scrivere stored procedure per lo stesso, ma voglio un'applicazione a tre livelli.

Desidero che i dati inseriti nel database come record vengano elaborati eseguendo calcoli su di esso. I dati originali dovrebbero rimanere inalterati, mentre i nuovi dati, i post-calcoli, devono essere archiviati come nuovo record di entità nel database.

Dove devo scrivere il codice per questo calcolo in background? Come sono le regole e la logica di business, dovrei metterlo in nuovi file JavaBeans?

    
posta BriskLabs Pakistan 19.09.2012 - 23:41
fonte

3 risposte

78

La logica aziendale deve essere inserita nel modello e dovremmo mirare a modelli modelli e skinny controllori .

Come punto di partenza, dovremmo iniziare dalla logica del controller. Ad esempio: durante l'aggiornamento , il tuo controller dovrebbe indirizzare il tuo codice al metodo / servizio che consegna le tue modifiche al modello.

Nel modello, possiamo facilmente creare classi helper / service in cui l'applicazione regole o calcoli aziendali può essere convalidata.

Un riepilogo concettuale

  • Il controller è per la logica dell'applicazione. La logica specifica di come la tua applicazione vuole interagire con il "dominio della conoscenza" appartiene.

  • Il modello è per la logica indipendente dall'applicazione . Questa logica dovrebbe essere valida in tutte le possibili applicazioni del "dominio della conoscenza" a cui appartiene.

  • Pertanto, è logico inserire tutte le regole aziendali nel modello.

risposta data 20.09.2012 - 00:08
fonte
19

Come sempre, dipende dalla complessità del progetto.

Nelle applicazioni banali, in cui la complessità del modello di dominio è relativamente piccola, puoi inserire la logica nei modelli e chiamarla un giorno.

Tuttavia, per applicazioni non banali con modelli complessi e molte regole aziendali, è meglio separare le cose un po 'di più.

Se si inserisce la logica aziendale che coinvolge più di un modello in un modello, si introduce un accoppiamento stretto tra tali modelli. Poiché le applicazioni continuano a crescere, questi modelli tendono a trasformarsi in god models , sapendo troppo. E questo si trasformerà rapidamente in un grande casino che è difficile da testare e mantenere. In tal caso, è utile mettere la logica in un livello separato.

Quando decidi l'astrazione, prendi in considerazione la complessità e gli scopi della tua app ed evita la sovraingegnerizzazione. Per applicazioni banali / di piccole dimensioni, l'introduzione di più livelli di quelli necessari aumenta la complessità anziché ridurla.

Robert Martin (Uncle Bob) ha un buon post sul blog su questo argomento: The Clean Architecture.

    
risposta data 20.09.2012 - 07:37
fonte
5

Mettere la logica di business all'interno del modello potrebbe sembrare il modo migliore per andare. Il controller riceve una chiamata dall'app Web remota. Il controller sul servizio Web MVC accetta la chiamata e reindirizza l'esecuzione a un metodo in BL. Ora, Business Logic può essere contenuta nel 'Modello', ma può anche essere posizionata in un'altra cartella, ad esempio 'Business Logic' . Quindi non esiste una regola ferrea su dove sarà la logica di business.

Ho utilizzato un servizio web creato su MVC 3.0 e il contenitore della logica aziendale è MVC MODELLO .

    
risposta data 20.09.2012 - 12:56
fonte