Un problema con queste discussioni è il mixaggio tutt'ora frequente di diversi punti di vista architettonici nella stessa discussione o diagramma.
- Alcuni punti di vista architettonici sono pensati per mostrare profondità: approfondimenti su come vengono implementate alcune funzionalità particolari.
- Mentre altri punti di vista architettonici sono destinati a mostrare l'ampiezza: le interazioni di componenti che sono pari (che esistono allo stesso livello in termini di profondità).
La combinazione di entrambi i punti di vista (profondità e larghezza) insieme nello stesso diagramma tende a creare confusione. Nel rilevare le fonti citate, trovo che non ci sia carenza di questo tipo di miscelazione di questi elementi che sarebbero idealmente separati da punti di vista architettonici.
Ad esempio, il diagramma che stai mostrando (citando Microsoft), hai detto che MS afferma di essere un diagramma MVC, ma sta principalmente mostrando la profondità nel modello di dominio, con un focus eccessivo sulla persistenza (dal punto di vista MVC) . Quindi, questo diagramma è debole sull'ampio punto di vista dei peer interagenti (M, V, C) e si mescola in alcuni punti di vista di profondità con persistenza: scomposto (ed elevato per essere un peer degli altri componenti). È comprensibile che si possa mettere in discussione dove la logica di dominio appartiene ai punti di vista architettonici "tutti-da-facile-a-mix".
In MVC, il modello è ciò che è responsabile della gestione degli oggetti di dominio, rispondendo alle query e ai domini orientati al dominio comandi (inclusa la convalida, ecc.) e l'applicazione / esecuzione di regole e ampli orientati al dominio comportamenti. MVC non parla di persistenza irrinunciabile: se il tuo sistema include persistenza che è un dettaglio di implementazione (dettaglio di profondità, non di larghezza). Pertanto, non ci sono dubbi su dove la logica di dominio appartenga a MVC, o se gli oggetti di dominio siano stupidi o intelligenti - queste domande sono tutti aspetti interni (dettagli di implementazione) del modello.
Hai anche ragione sul fatto che il termine Modello sia sovraccarico e sovrautilizzato. Quindi, ciò che il termine significa deve essere valutato in qualche contesto. Sfortunatamente, molte di queste discussioni non riescono a impostare o mantenere il contesto, aggiungendo confusione.
In MVC, il termine Modello indica ciò che ho menzionato sopra (custode di oggetti dominio, gestore di query e comandi ...). Potremmo parlare di POJO, e tale discussione dovrebbe applicarsi alle interazioni tra i peer M, V, C e se la query & l'interfaccia di comando per il modello utilizza oggetti più intelligenti o più intelligenti.
Nel dettaglio della persistenza - un dettaglio di implementazione dal punto di vista di MVC - possiamo parlare a POJO, o smart / stupido in diversi punti del meccanismo di persistenza, possiamo anche riutilizzare il termine modello su diverse interfacce nei dettagli di implementazione della persistenza.
In sintesi, è possibile utilizzare il termine modello in entrambi i modi che stai descrivendo, non è né / né. Ciò che rende le cose confuse è che spesso non riusciamo a impostare il contesto e / o non riescono a mostrare quando spostiamo il contesto dall'ampiezza (l'interazione dei componenti peer) alla profondità (dettaglio dell'implementazione di solito di uno di questi componenti).