Struttura del codice per più applicazioni con un nucleo comune

4

Voglio creare due applicazioni che avranno molte funzionalità comuni. Fondamentalmente, un sistema è una versione più avanzata dell'altro sistema. Chiamiamoli Simple e Advanced . Il sistema Advanced aggiungerà, estenderà, modificherà e talvolta sostituirà la funzionalità del sistema Simple . Ad esempio, il sistema Advanced aggiungerà nuove classi, aggiungerà proprietà e metodi alle esistenti classi Simple , cambierà il comportamento delle classi, ecc.

Inizialmente pensavo che le classi Advanced venissero semplicemente ereditate dalle classi Simple , ma posso vedere che la funzionalità diverge in modo abbastanza significativo man mano che lo sviluppo procede, pur mantenendo una funzionalità di base. Ad esempio, il sistema Simple potrebbe avere una classe Project con una proprietà Sponsor mentre il sistema Advanced ha un elenco di Project.Sponsors. Sembra una cattiva pratica ereditare da una classe e quindi nascondere, alterare o buttare via parti significative delle sue caratteristiche.

Un'alternativa è solo per eseguire due basi di codice separate e copiare il codice comune tra di loro, ma ciò sembra inefficiente, arcaico e irto di pericoli. Sicuramente siamo passati oltre i giorni dell'eredità "copia e incolla".

Un altro modo per strutturarlo sarebbe usare le classi parziali e avere tre progetti: Core che ha la funzionalità comune, Simple che estende le classi parziali Core per il sistema semplice e Advanced che anche estende le classi parziali Core per il sistema avanzato. Oltre a tre progetti di test per ogni sistema. Questo sembra un approccio più pulito.

Quale sarebbe il modo migliore per strutturare la soluzione / i progetti / il codice per creare due versioni di un sistema simile? Diciamo che più tardi voglio creare un terzo sistema chiamato Extreme , in gran parte basato sul sistema Advanced . Creo quindi un progetto AdvancedCore che sia Advanced che Extreme estendono utilizzando classi parziali? C'è un modo migliore per farlo?

Se è importante, è probabile che sia un sistema C # / MVC, ma sarei felice di farlo in qualsiasi linguaggio / framework adatto.

    
posta Azrael Seraphin 05.11.2013 - 14:40
fonte

1 risposta

2

L'approccio migliore qui è avere il modello della triade MVC in un progetto separato e comune. Questo modello dovrebbe fornire tutte le caratteristiche del modello richieste dalle varie versioni. Ma il modello non dovrebbe implementare le restrizioni che differenziano la versione Simple dalla versione Advanced . Per fare il tuo esempio, se la versione Advanced supporta più Sponsor per un progetto e la versione Simple solo uno Sponsor, allora il modello dovrebbe provvedere a un elenco di Sponsor, anche se questo è meno efficiente per Simple versione.

Per ogni versione, si crea un progetto separato contenente le parti View e Controller della triade MVC. Questo è anche il punto in cui inserisci le restrizioni specifiche per la versione, come avere un solo sponsor per un progetto nella versione Simple .

    
risposta data 05.11.2013 - 15:11
fonte