Sto provando a progettare un'applicazione, qualcosa di abbastanza generico su uno stack C # .NET.
Si suppone che sia un'applicazione desktop pensata per controllare apparecchiature industriali e per eseguire misurazioni e test, tuttavia è previsto che sia in grado di passare in seguito a diverse interfacce utente che trattano con diversi
Sto cercando di avere un approccio abbastanza generico:
- UI Agnostic: pagine web / Winform / WPF / GTK # / Whathever, ecc. usando oggetti nudi per evitare i fastidi di un codice UI della piastra della caldaia molto elevato.
- DB Agnostic per l'archiviazione dei dati (ADO.NET e EF possono occuparsene)
- Controllo remoto e monitoraggio (che è davvero complicato ma suppongo che con WCF dovrei riuscire ad avere un accesso remoto con servizio in esecuzione sul client remoto)
- Gestione utenti
- Risorse industriali esterne (dispositivi)
- Registrazione e segnalazione errori
- Esportazione di rapporti e dati
- Licenza
Il livello aziendale dell'applicazione è diviso in tre parti principali e sfrutta le altre parti sopra descritte:
- Edizione: definire una serie di test (diagramma di flusso) con condizioni (interazioni dell'utente, recupero dei risultati durante i test) utilizzando le risorse industriali disponibili
- Operazione: esegue i test definiti sopra con l'interazione dell'utente (se definita nella fase precedente)
- Analisi: gestire i dati (DB) che sono stati registrati conformemente alla definizione di test fornita nella parte dell'edizione e fornire alcuni calcoli statistici: funzionalità di data mining (clustering, rilevamento di anomalie, ecc.) e funzionalità di reporting (che può anche essere definito per essere generato automaticamente in diversi momenti dell'operazione).
Il mio problema è che mi piacerebbe avere un approccio modulare e mi chiedo se questo sia davvero auspicabile nel mio caso. L'approccio è solido ma allo stesso tempo sembra fornire molti problemi.
In teoria, significa che puoi testare i tuoi moduli indipendentemente gli uni dagli altri ma in realtà nella maggior parte dei casi anche se puoi prendere in giro gli input / output richiesti per i test, la realtà è che richiede altre dipendenze per farlo funzionare e questo è per me la vera conclusione di questo approccio. Il fatto che tu possa caricare e scaricare alcuni sono per me applicabili solo in un paio di situazioni ma non così tante.
Ad esempio, User Management sta utilizzando il modulo Database che probabilmente utilizzerà anche un altro modulo di cifratura e così via e così via.
In seguito anche il controllo remoto e il monitoraggio lo userebbero così ... il mio punto è che sembra piuttosto difficile avere moduli completamente indipendenti qui.
L'approccio plug-in / modulare funzionerebbe come un incantesimo per le risorse industriali esterne in cui tali dispositivi dovrebbero implementare una determinata interfaccia per essere compatibili con il sistema.
Ma per il resto sono davvero sospettoso che valga la pena di usare MEF o qualsiasi altro framework di estensione / estensione.
Che ne pensi? L'approccio modulare è davvero applicabile a tutto nel mio caso? Oppure solo un paio di funzioni possono trarne vantaggio.