web-dev-qa-db-fra.com

Où mettre la logique métier dans la conception MVC?

J'ai créé une simple application MVC Java qui ajoute des enregistrements via des formulaires à une base de données.

Mon application collecte des données, elle les valide également et les stocke. En effet, les données proviennent de différents utilisateurs en ligne. les données sont principalement de nature numérique.

Maintenant, sur les données numériques stockées dans la base de données (serveur SQL), je veux que mon application effectue des calculs et affiche les résultats. L'utilisateur n'est pas intéressé par la façon dont les calculs sont effectués, ils doivent donc être encapsulés. L'utilisateur doit uniquement pouvoir visualiser les données calculées simples (par exemple, les données de colonne A moins les données de colonne B divisées par les données de colonne C). Je sais comment écrire des procédures stockées pour les mêmes, mais je veux une application à trois niveaux.

Je veux que les données que je mets dans la base de données comme un enregistrement, travaillées en effectuant des calculs dessus. Les données d'origine ne doivent pas être affectées, tandis que les nouvelles données, après les calculs, doivent être stockées en tant que nouvel enregistrement d'entité dans la base de données.

Où dois-je écrire le code pour ce calcul d'arrière-plan? Comme ce sont les règles et la logique métier, dois-je le mettre dans de nouveaux fichiers JavaBeans?

46
BriskLabs Pakistan

Le logique métier devrait être placé dans le modèle, et nous devrions viser les modèles gras et maigres contrôleurs .

Comme point de départ, nous devrions partir de la logique du contrôleur. Par exemple: lors de la mise à jour, votre contrôleur doit diriger votre code vers la méthode/service qui délivre = vos modifications du modèle.

Dans le modèle, nous pouvons facilement créer des classes d'assistance/service où l'application règles ou calculs commerciaux peut être validée.

Un résumé conceptuel

  • Le contrôleur est destiné à la logique d'application. La logique propre à la manière dont votre application souhaite interagir avec le "domaine de connaissances" auquel elle appartient.

  • Le le modèle est pour une logique indépendante de l'application. Cette logique doit être valable dans toutes les applications possibles du "domaine de la connaissance" auquel elle appartient.

  • Il est donc logique de placer toutes les règles métier dans le modèle.

87
Yusubov

Comme toujours, cela dépend de la complexité du projet.

Dans les applications triviales, où la complexité du modèle de domaine est relativement faible, vous pouvez mettre la logique dans les modèles et l'appeler un jour.

Cependant, pour les applications non triviales avec des modèles complexes et beaucoup de règles métier, il est préférable de séparer un peu plus les choses.

Si vous mettez la logique métier qui implique plusieurs modèles dans un modèle, vous introduisez un couplage étroit entre ces modèles. À mesure que les applications continuent de croître, ces modèles ont tendance à se transformer en god models, en sachant trop. Et cela se transformera rapidement en un gros gâchis difficile à tester et à entretenir. Dans ce cas, il est donc avantageux de placer la logique dans une couche distincte.

Lorsque vous décidez de l'abstraction, tenez toujours compte de la complexité et des objectifs de votre application, et évitez la suringénierie. Pour les applications triviales/petites, l'introduction de plus de couches que nécessaire augmente la complexité au lieu de la réduire.

Robert Martin (Oncle Bob) a un bon blog sur ce sujet: The Clean Architecture.

22
Hakan Deryal

L'intégration de la logique métier dans le modèle peut sembler la meilleure solution. Le contrôleur reçoit un appel de l'application Web distante. Le contrôleur du service Web MVC prend l'appel et redirige l'exécution vers une méthode dans BL. Maintenant, Business Logic peut être contenu dans le 'Model', mais peut également être positionné dans un autre dossier, disons, 'Business Logic'. Il n'y a donc pas de règle stricte sur la position de la logique métier.

J'ai utilisé un service Web construit sur MVC 3.0 et le conteneur de la logique métier est le MVC MODÈLE .

5
MontyPython