Sto espandendo/convertendo un'applicazione legacy Web Form in un'applicazione MVC completamente nuova. L'espansione è sia dal punto di vista della tecnologia che del caso di utilizzo aziendale. L'applicazione legacy è un Database Driven Design (DBDD) ben fatto. Quindi per es. se hai diversi tipi di Dipendenti come Operatore, Supervisore, Custode del Negozio ecc. e devi aggiungere un nuovo tipo, vai e aggiungi alcune righe in un paio di tavoli e voilà, l'interfaccia utente ha automaticamente tutto per aggiungere/aggiornare il nuovo tipo di dipendente. Tuttavia la separazione dei livelli non è così buona.Progettazione basata su domini o progettazione guidata da database per un'applicazione Web MVC
Il nuovo progetto ha due obiettivi primari
- estensibilità (per momento e le esigenze di pipeline futuri)
- prestazioni
ho intenzione di creare il nuovo progetto di sostituzione del Database Driven Design (DBDD) con un Domain Driven Design (DDD) tenendo presente il requisito di estensibilità. Tuttavia, il passaggio da una progettazione guidata da database a una progettazione basata su domini sembra avere un impatto inverso sui requisiti delle prestazioni se si confronta con le prestazioni dell'applicazione legacy DBDD. Nell'applicazione legacy qualsiasi chiamata per i dati dell'interfaccia utente interagirebbe direttamente con il database e tutti i dati sarebbero restituiti sotto forma di un DataReader o (in alcuni casi) di un DataSet.
Ora con una rigida DDD sul posto qualsiasi chiamata per i dati verrà instradata attraverso il livello aziendale e il livello di accesso ai dati. Ciò significherebbe che ogni chiamata inizializzerebbe un oggetto business e un oggetto di accesso ai dati. Una singola pagina dell'interfaccia utente potrebbe necessitare di diversi tipi di dati e, trattandosi di un'applicazione Web, ogni pagina potrebbe essere richiesta da più utenti. Inoltre, essendo un'applicazione Web MVC senza stato, ogni richiesta richiede l'inizializzazione di oggetti business e oggetti di accesso ai dati ogni volta. Quindi, per un'applicazione stateless MVC, il DBDD è preferibile a DDD per le prestazioni.
O c'è un modo in DDD per raggiungere entrambi, l'estensibilità che fornisce DDD e le prestazioni fornite da DBDD?
Considerato come un'interessante domanda perché prende alla lettera i meccanismi dietro i vari progetti in modo così letterale. Molto spesso queste discussioni sono troppo astratte per essere utili. Questo è molto diretto. Sono ansioso di vedere quali sono le risposte (io stesso non ne ho idea). –
Ho un paio di domande prima di iniziare a pensare: 1. Che cosa sono esattamente i requisiti di prestazione? Quanto veloce dovrebbe rispondere l'applicazione. Se tutte le domande dovessero essere risposte in 1 sec O 0.5 secondi per il recupero dei dati e 1 secondo per gli aggiornamenti? 2. Avete già alcune metriche per l'applicazione corrente e quanto più lento dovrebbe funzionare un MVC? –
Ho le metriche per le operazioni correnti del database dell'applicazione. Ad eccezione del reporting che può comportare complicate operazioni con dati pesanti e può richiedere alcuni minuti, il CRUD impiega meno di un secondo mentre le operazioni di recupero dei dati massime avvengono entro 2 - 3 secondi a livello di database. Quanto più lento sarà l'applicazione MVC, la domanda è tutto su – devanalyst