J'ai vu plusieurs configurations pour la persistance d'informations dans la base de données. Généralement, trois types de designs semblent communs dans mon coin du monde:
- Le contrôleur gère la persistance
- Le modèle gère la persistance
- La bibliothèque tierce gère la persistance, nécessitant généralement une sorte d'annotations sur le modèle.
Je me demande quelle configuration (le cas échéant) est, conceptuellement, la plus facile à utiliser / la plus compatible avec une architecture MVC?
(Si ce n'est pas un que j'ai énuméré, veuillez donner un bref aperçu / aperçu dans le cadre de la réponse)
De façon réaliste, MVC est principalement un modèle d'implémentation d'interface utilisateur, donc la question est quelque peu théorique. Cependant, il n'y a vraiment que deux options à grande échelle. Votre contrôleur envoie généralement des demandes de chargement ou d'enregistrement d'entités dans votre modèle en utilisant 1) une couche de service quelconque ou 2) le modèle d'enregistrement actif.
La couche de service peut prendre plusieurs formes, bien que ma préférence personnelle soit de travailler avec une abstraction de référentiel pour les entités racine agrégées, dont les implémentations concrètes fonctionneront soit avec une sorte d'ORM, soit un DAO léger, soit un API pour un magasin non relationnel si cela a du sens pour l'application.
Le modèle d'enregistrement actif signifie que votre modèle est responsable de la persistance, bien que cela signifie généralement qu'une classe de base quelconque gère les mappages vers votre magasin, de sorte que votre modèle n'est pas vraiment directement impliqué.
Fondamentalement, le contrôleur envoie des demandes de persistance d'objets, qu'il s'agisse d'un appel à votre référentiel, à votre implémentation UnitOfWork ou à la méthode Save sur vos entités. Si vous utilisez des référentiels, vos objets de modèle ignorent la persistance.
la source
Dans un système MVC (model-view-controller), le modèle contient les données. Je pense donc que la persistance de la base de données devrait y figurer.
la source
La plupart des échantillons MVC de haut niveau que j'ai vus ont une
infrastructure
couche distincte qui a le code d'implémentation de la base de données réelle (c'est-à-dire les appels spécifiques à NHibernate, ou EF ou Linq ou quelque soit votre couche de données), tandis que la couche "modèle" (souvent aussi la couche "Domaine") possède les interfaces qui définissent les services de données.la source
La pratique standard dans MVC est d'inclure la structure et la persistance des données dans la couche M (odel).
La couche modèle n'inclut pas seulement les classes (POCO, etc.) que vous allez utiliser dans votre application. Ils incluent les référentiels de ces classes.
Un exemple serait un référentiel où vous avez des groupes d'instances de classes de données, c'est-à-dire:
Vous pourrez mieux organiser votre domaine de modèle et aurez également accès à vos données de nombreuses façons, mais la couche données / modèle sera toujours compacte et robuste
la source