Question

Je suis actuellement en train d'architecturer une petite application CRUD.Leur base de données est un énorme gâchis et changera fréquemment au cours des 6 prochains mois à un an.Que recommanderiez-vous pour ma couche de données :

1) ORM (si oui, lequel ?)

2) Linq2Sql

3) Procédures stockées

4) Requêtes paramétrées

J'ai vraiment besoin d'une solution suffisamment dynamique (à la fois rapide et simple) pour pouvoir remplacer des tables et ajouter/supprimer des colonnes fréquemment.

Note:Je n'ai pas beaucoup d'expérience avec ORM (seulement un peu SubSonic) et j'ai généralement tendance à utiliser des procédures stockées, alors ce serait peut-être la voie à suivre.J'adorerais apprendre Ling2Sql ou NHibernate si l'un ou l'autre permettait la situation que j'ai décrite ci-dessus.

Était-ce utile?

La solution

Un élément clé à prendre en compte ici est que si le schéma de la base de données change fréquemment, vous souhaitez bénéficier d'un certain niveau de sécurité du type au moment de la compilation.J'ai trouvé que c'était un problème avec NHibernate car il utilise des fichiers de mappage XML, donc si vous modifiez quelque chose dans le schéma de votre base de données, vous ne savez pas avant l'exécution que le mappage est interrompu.

Ce sera également un problème avec les processus stockés.

L'utilisation de Linq2Sql vous donnera l'avantage de savoir exactement où votre code se casse lorsque vous modifiez un schéma au moment de la compilation.Pour moi, c'est quelque chose qui aurait priorité sur tout le reste si je travaille avec un schéma qui change fréquemment.

Autres conseils

Je regarderais SubSonic avec la configuration du fournisseur de build (Website Project).Cela fonctionne très bien car il régénère automatiquement les objets DAL à chaque fois que vous construisez votre projet, donc si la base de données change d'une manière qui brise votre code, vous obtenez une erreur de construction.

Cela a bien fonctionné jusqu'à ce que le schéma de la base de données devienne vraiment complexe et que nous atteignions les limites du modèle ActiveRecord, mais tant que le schéma n'est pas extrêmement complexe, cela fonctionne plutôt bien.Une fois le schéma stabilisé, vous pouvez basculer pour ne créer le DAL que lorsque vous le souhaitez.

Vous souhaitez absolument utiliser un ORM.N'importe quel ORM est acceptable, mais vous voulez quelque chose qui générera des classes fortement typées.Lorsque des champs sont ajoutés, modifiés ou supprimés d'une table, vous souhaitez pouvoir régénérer ces classes et gérer uniquement la correction des erreurs de compilation.Si vous utilisez un modèle dynamique, vous risquez d'avoir de nombreuses erreurs d'exécution désagréables.C'est très important!je fais partie du Ma génération équipe de développement sur sourceforge, et je pense que c'est une excellente solution à votre problème.Vous pouvez générer des dOOdads, NHibernate, EasyObjects, EntitySpaces, etc.Si vous souhaitez opter pour une solution plus coûteuse, optez pour CodeSmith ou LLBGen Pro.Bonne chance - toute personne intéressée par MyGeneration n'hésitez pas à me contacter si vous avez des questions.

NHiberner, mais seulement si vous êtes disposé à avoir une approche orientée objet d'abord dans laquelle vous définissez vos classes, puis définissez la structure de table souhaitée dans les fichiers de mappage, puis créez un schéma de base de données à l'aide des classes de génération de schéma intégrées de NHibernate.

Pour faire l'inverse (par exemple, vous avez un tas de tables et vous basez ensuite la conception de votre objet sur cela), j'ai trouvé Ma génération + NHibernate pour fonctionner, même si je ne suis pas très satisfait des classes résultantes (principalement parce que je suis un adepte de la véritable programmation orientée objet).

Si j'étais à votre place, j'essaierais de tirer parti de ce que je savais (sprocs) avec Linq2Sql.Linq2Sql peut toujours utiliser vos sprocs mais vous avez alors l'avantage supplémentaire de mettre un nouvel outil dans votre ceinture.Je pense que maîtriser la syntaxe et la méthodologie Linq2XXX (X étant une technologie aléatoire et non un divertissement pour adultes... ce qui n'est pas une mauvaise idée maintenant que j'y pense) sera un excellent ajout à vos compétences en utilisant Linq sur une collection d’objets est vraiment sympa.

Mais finalement, quelque chose comme NHibernate vous conviendra mieux à long terme.

EntitySpaces peut régénérer votre DAL/Business Layer en une minute, et sans perte de code, voir la version d'essai ==> ICI

Aucune inscription nécessaire, fonctionne également sous Visual Studio.

Utilisez EntitySpaces.tu m'enverras des fleurs, c'est garanti.tout simplement génial.changez la base de données comme vous le souhaitez.appuyez sur le bouton, bang.toutes vos modifications sont effectuées.sans changer votre code personnalisé.Je l'aime.

L'application est-elle simple ?Si je devais travailler avec des éléments de schéma/conception pendant quelques mois et ne pas vraiment me soucier d'une application réelle...J'envisagerais d'utiliser EDM et un projet d'application Web Dynamic Data Entities.Cela vous permet de démarrer avec le moins d'effort possible, à mon avis.Cela vous permet de rester concentré sur le schéma, les données et d'autres choses intéressantes.J'espère ne pas avoir trop de points négatifs avec celui-ci !

Voici à quoi ressemblera la nouvelle boîte de dialogue de projet ce

Vous êtes déjà satisfait des processus stockés et ils pourraient suffire à faire abstraction du schéma changeant.Si les ORM ne sont pas satisfaits des procédures stockées, ils travailleront peut-être avec des vues que vous gardez à jour en fonction du schéma changeant.

Si le schéma de la base de données change souvent, préférez Entity Framework à LINQ2SQL.Si le schéma change, en utilisant L2S, vous devez
1) Supprimez et rajoutez votre table (perte de vos personnalisations)
2) Modifier le modèle à la main (comme fait ici dans stackoverflow)

L'EF est un super-ensemble de L2S, vous offrant plus de flexibilité d'utilisation et d'indépendance par rapport au SGBD.

regardez pourquoi cela change et voyez si vous pouvez anticiper et généraliser les types de changements à venir afin qu'ils ne brisent pas votre code

un cadre peut faciliter l'adaptation aux changements, mais une analyse plus approfondie aura un avantage à plus long terme

N'importe quelle solution peut fonctionner, ce dont vous avez réellement besoin est un ensemble de tests qui garantiront que les opérations de base telles que l'insertion, la sélection, la mise à jour et la suppression fonctionnent.De cette façon, vous pouvez simplement exécuter vos tests et vérifier si les mappages sont à jour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top