2008-11-05 12 views
3

Je ne fais que commencer avec MVC, et il me semble que ce sera une excellente façon d'y aller, une fois que j'arriverai à y réfléchir.Modèles de table multiples avec MVC?

La plupart du matériel que je suis venu à travers semble avoir une relation 1-1 entre les modèles, vues et tableaux - à savoir chaque modèle représente une table et permet CRUD, plus des fonctions plus complexes.

Et si j'ai un modèle de compte, ce qui permettrait la création de compte et la mise à jour.

Je voudrais utiliser un/vue d'inscription et contrôleur pour créer() le compte, mais je veux utiliser un/membres/vue du compte et contrôleur pour mettre à jour, changer de mot, etc.

Serait-il préférable d'avoir un modèle d'inscription, ou est-ce que je peux utiliser n'importe quel modèle dont j'ai besoin à partir de plusieurs endroits?

En outre, dire un compte peut avoir de nombreux utilisateurs, mais je veux créer le premier utilisateur à votre inscription. Je voudrais exécuter la configuration du compte et la création de l'utilisateur en tant que transaction. Dois-je avoir un modèle de compte et un modèle utilisateur, et travailler avec les deux, ou simplement avoir la fonction de création create() pour le compte créer l'utilisateur par défaut?

J'utilise PHP avec CodeIgniter

Répondre

4

En général, ce que vous voulez faire est le plus susceptible d'examiner vos tables pour être une « couche » supplémentaire ci-dessous votre modèle; le concept MVC ne traite généralement pas trop de la mise en œuvre des problèmes de support; c'est-à-dire si vous utilisez ou non des tables DB ou des fichiers de stockage à plat ou des représentations de données en mémoire.

Ce que je propose est de regarder le problème comme un problème d'avoir une couche qui fait l'interaction entre vos tables et votre application; votre couche "objets de données". Pensez-y comme une sérialisation pure. Si vous utilisez un modèle objet, ce sera votre couche ORM.

Ensuite, vous voulez avoir une autre couche qui définit la « logique métier »; c'est-à-dire l'interaction de vos données avec vos données. Cela a à voir avec des choses telles que la façon dont le compte interagit avec l'utilisateur, etc. L'encapsulation ici prend en charge essentiellement vos interactions de haut niveau. De cette façon, vous pouvez définir les abstractions qui ont le plus de sens pour vos besoins métier sans avoir besoin de dépendre de l'implémentation; par exemple, vous pouvez définir un modèle "UserAccount", qui fera tout ce que vous devez faire pour gérer les comptes d'utilisateurs; définissez toutes les choses que vous voulez que cette abstraction fasse. Ensuite, une fois que vous avez cette abstraction, c'est votre modèle; vous pouvez alors définir, dans les rouages ​​internes de ce modèle, comment les interactions se produisent avec votre code de persistance.

De cette façon, vous abstrait la persistance et mise en œuvre de votre modèle à partir du modèle réel Interface. Vous pouvez donc définir votre modèle comme faisant les choses que vous voulez qu'il fasse sans se soucier de l'implémentation sous-jacente. Les avantages de ceci sont significatifs; le processus de réflexion sur ce que vous voulez que votre Modèle fasse, indépendamment de la façon dont il le fera, peut être très instructif; De plus, si votre couche de données de support change, votre modèle n'a pas besoin de changer; donc vous pouvez prototyper avec un fichier plat, par exemple.

+0

Oui - MVC devrait être DMVC. Le modèle ne fait pas l'abstraction des données; il y a une autre couche pour ça. – staticsan