Un référentiel par table ou un par section fonctionnelle?

asp.net-mvc c# entity-framework

Question

J'utilise ASP.NET MVC 2 et C # avec Entity Framework 4.0 pour coder par rapport à une base de données normalisée SQL Server. Une partie de la structure de ma base de données contient une table d'entrées avec des clés étrangères associées à des sous-tables contenant des pilotes, des voitures, des moteurs, des châssis, etc.

Je suis le tutoriel Nerd Dinner qui établit un référentiel pour les dîners, ce qui est assez juste. Est-ce que j'en fais un pour les pilotes, un pour les moteurs, un pour les voitures, etc., ou dois-je en faire un grand pour les entrées?

Quelle est la meilleure pratique pour ce type de travail? Je suis encore nouveau dans cette méthode de codage.

Réponse acceptée

Je suppose qu'il n'y a pas vraiment de "meilleure pratique" pour cela - cela dépend de votre style de codage et des exigences de votre application. Vous pouvez certainement créer un référentiel pour chaque type d’entité de votre système - cela fonctionnera parfaitement.

Dans votre cas, j’envisagerais probablement au moins de créer un référentiel pour les pilotes, et éventuellement un second pour les voitures, les moteurs et les châssis (étant donné que ceux-ci relèvent du même domaine de compétence: ils sont interconnectés, ils "appartiennent" ensemble. ).

Mais bien sûr, si ce référentiel unique pour les voitures, le moteur et le châssis devient trop lourd, vous pourriez envisager de le diviser en trois référentiels distincts.

J'essaierais de trouver un équilibre entre le nombre de référentiels - essayer de regrouper ce qui appartient logiquement ensemble - et le nombre de méthodes sur ces référentiels. Cinq, dix méthodes sont acceptables - si vous parlez de 20, 30 ou 50 méthodes, votre référentiel est peut-être trop volumineux et trop lourd.

Il s’agit bien d’une décision architecturale et, en tant que telle, il n’ya pas vraiment beaucoup de faits concrets pour vous guider - c’est plus un «instinct» et une sorte d’expérience. Si vous ne possédez pas encore l'expérience nécessaire - adoptez une approche, utilisez-la et, lorsque vous avez terminé, examinez-la de nouveau avec un œil critique et voyez: qu'est-ce qui a fonctionné? Et ça n'a pas marché? et ensuite, dans votre prochain projet, essayez une autre approche et remettez en question sa validité à la fin du projet. Vivre et apprendre!


Réponse populaire

Personnellement, je trouve qu'il est préférable de créer un référentiel distinct pour chaque table.

Je crée ensuite une services layer dans laquelle, dans une classe, je voudrais exécuter toutes les commandes pour une action spécifique (par exemple, changer la voiture d'un conducteur existant en une voiture récemment ajoutée). La couche services est l'endroit où j'appellerai plusieurs référentiels si une action dont j'ai besoin contient plusieurs objets liés entre eux.

Je fais de mon mieux pour garder mes référentiels aussi "stupides" que possible et mettre tous les éléments "intelligents" dans la couche services. La couche de services supplémentaires m'aide également à éviter de gonfler mes contrôleurs.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow