Consigli di architettura per convertire l'app biz dalla vecchia scuola a nuova scuola?

1

Ho un'applicazione aziendale WinForms che si è evoluta negli ultimi anni. Si tratta di moduli su dati con un numero personalizzato di esperienze di interfaccia utente personalizzate per il business, quindi non penso che sia un candidato per portarsi a qualcosa come SharePoint o riscrivere in LightSwitch (almeno non senza investimenti significativi).

Quando l'ho iniziato nel 2009 ero nuovo a questo tipo di sviluppo (provenendo da una programmazione di basso livello e la mia conoscenza RDBMS era leggermente superiore a quella che ricevevo da scuola).

Pertanto, quando mi sono confrontato con un modello di business che opera su un rigido ciclo contabile mensile, ho preso la sfortunata decisione di creare un database separato per ciascun periodo contabile.

Inoltre, quando ho iniziato a conoscere DataSet, ho appreso Linq2Sql, quindi ho imparato EntityFramework. Gli schermi sono un mix and match di quelli.

Ora, dopo alcuni anni di sviluppo di questa cosa da solo, ho finalmente una piccola squadra.

In definitiva, voglio un front-end Web (per l'accesso remoto a più schermate dirette con griglie di dati) e un client spesso (per le interfacce altamente personalizzate).

La mia domanda è: puoi offrirmi alcuni consigli sull'architettura a tratti più ampi che mi aiuteranno a formulare un piano di battaglia per convertire in un unico database e porre le basi per i miei obiettivi futuri allo stesso tempo ?

Ecco una schermata che mostra come uno schermo precedente utilizza DataSet e uno schermo più recente utilizza EF (penso che questo potrebbe renderlo più reale per chi legge la domanda - Sono disposto ad aggiungere qualsiasi dettaglio se qualcuno è disposto ad aiutare).

    
posta Aaron Anodide 08.11.2012 - 20:25
fonte

2 risposte

3

Se stai portando questa cosa al "livello successivo" e hai una piccola squadra con cui iniziare, vorrai assicurarti di tornare al tavolo da disegno e coprire tutte le tue basi.

database

Dai un'occhiata a ciò che hai costruito in passato. È necessario analizzare i progetti e creare una serie di funzioni e scenari che è necessario coprire. Quindi lavora a un progetto di database che li copra.

DAL

Una volta che il tuo database è relativamente bloccato, vai a lavorare su ciò di cui un cliente avrebbe bisogno per accedere dal database. Questo sarebbe il tuo Data Access Layer (DAL). Creare una libreria che gestisca questa comunicazione con il database ed eventualmente l'autenticazione. Prendi in considerazione le piattaforme client con cui lavorerai e come ospiterà il DAL.

  • Supporterai una modalità offline che necessiterà di una sincronizzazione \ unione online?
  • Il DAL sarà ospitato sulla rete \ network? Se è così, questo ti dà la possibilità di usare WCF o OData?

Se i client sono sempre connessi e un client Web è obbligatorio, il DAL deve essere ospitato sul Web in modo che tutti i client possano utilizzare lo stesso DAL. Ciò non significa che non puoi creare un nuovo DAL in futuro per i client one-off.

Client

Questo è il punto in cui separa davvero le basi del codice. Se si desidera supportare più tecnologie Windows, è meglio utilizzare XAML come front-end (WinAM \ WinPhone8 \ WinRT XAML, Silverlight XAML, WPF XAML). Tuttavia, questo non funziona per il Web a meno che tu non scelga come target Silverlight (che è davvero una tecnologia client). Quindi avrai un front-end diverso qui.

Se separi l'interfaccia utente dal codice logico, vedrai davvero un guadagno nella condivisione del codice. Leggi sul pattern MVVM (Model-View-ViewModel) per quello che intendo. Anche l'utilizzo di uno dei numerosi framework MVVM di .NET potrebbe essere d'aiuto. Generalmente è orientato verso l'interfaccia utente XAML, ma i suoi concetti possono aiutarti a separare correttamente il tuo codice.

    
risposta data 13.11.2012 - 20:13
fonte
1

Penso che sia necessario un livello di astrazione tra tutti i database del periodo contabile e le applicazioni, in modo che le applicazioni visualizzino i database come un'unica origine dati. Con un tale livello, puoi consolidare i database o migliorare le applicazioni in modo indipendente.

Quale forma assume il livello di astrazione è in discussione. Un paio di opzioni mi sono venute:

  • una libreria C # che gestisce l'I / O del database che entrambe le applicazioni ereditano
  • un singolo database SQL che ha sinonimi o collegamenti simbolici agli altri
risposta data 08.11.2012 - 22:58
fonte

Leggi altre domande sui tag