Je viens de commencer un nouveau travail de développeur de base de données pour une entreprise de taille moyenne à petite basée sur la technologie Microsoft. J'ai remarqué très tôt à quel point les pratiques s'écartent de ce que j'ai appris à l'école en ce qui concerne les meilleures pratiques, les modèles de conception, les tests et la gestion de projet.
Ce qui me dérange le plus, c'est la façon dont notre développeur de base de données principal (désormais appelé "John") conserve le schéma du modèle dans la base de données! Nous le faisons en ayant 3 tables "magiques"; un pour les schémas de base de données, un pour les tables et un pour les colonnes.
L'insertion d'un enregistrement dans la table " Tables " génère (via un déclencheur de base de données), la table réelle correspondante. L'insertion d'une ligne dans la table " Lignes " met à jour la table référencée avec cette ligne. Ceux-ci sont à leur tour lus par son programme C # maison pour générer des modèles C #, qui sont utilisés par les développeurs frontaux pour les contrôleurs et vers l'extérieur.
En dehors de cela, la plupart du développement se fait selon le framework ASP.NET MVC .
Je vois quelques défauts avec cette approche:
- Nous avons besoin de lui pour maintenir l'ORM, et il a rarement le temps de le faire (la sécurité d'emploi est bonne!)
- Les déclencheurs des tables "Tables" et "Lignes" sont défectueux. Ils ne prennent pas en charge les mises à jour de table, ni les contraintes de vérification ni les fonctionnalités plus "avancées". Bien que nous puissions certainement les améliorer, je ne sais pas encore si c'est la voie à suivre.
- Garder la logique programmatique dans la base de données semble étrange et restrictif (bien qu'il soit possible d'étendre ses modèles via C #).
- Son générateur de modèle C # doit être exécuté manuellement par l'une des 3 personnes (dont je fais partie) et n'est pas encore suffisamment mature pour être inclus dans un processus de construction automatisé.
Plusieurs personnes ont suggéré d'introduire progressivement un produit véritable et testé comme Entity Framework , mais il le rejette, affirmant que le maintien de la logique métier dans la couche de code ne convient qu'aux applications à petite échelle et aux projets d'amorçage pour les startups.
Ce message mène à quelque chose qui pourrait ressembler à une discussion d'opinion, mais ce n'est pas mon intention. Je veux juste des éclaircissements sur notre approche architecturale.
La conservation des modèles de domaine dans la base de données peut-elle être une solution durable pour une entreprise en croissance?
la source
Réponses:
Vous décrivez une plate-forme intérieure.
Le problème avec les plates-formes internes est que vous réinventez tous les mécanismes d'une plate-forme ou d'une technologie (dans ce cas, une base de données relationnelle) qui ont été affinés et perfectionnés au cours de décennies d'évolution et d'efforts, mais en les réinventant mal. Vous contournez toutes les optimisations disponibles pour ceux qui choisissent une conception plus conventionnelle, et vous échangez la simplicité et l'élégance initiales pour une complexité et des difficultés futures.
Cela dit, si le produit final de ce processus est de vraies tables et de vraies classes modélisant de vrais objets de domaine métier, je ne vois pas beaucoup de mal dans cette approche, à part l'immaturité des outils. Stack Exchange utilise en fait son propre ORM, et cela semble avoir fonctionné pour eux. Je sais donc que ces types d'approches «chalet» peuvent fonctionner.
Notez que la plupart des ORM qui adoptent l'approche "table d'abord" regardent simplement la structure de table dans la base de données pour créer les classes. Les tables "table" et "ligne" que votre ami a créées ne sont que des métadonnées qui existent déjà dans les tables système de la plupart des systèmes de bases de données relationnelles modernes.
Lectures complémentaires
Le projet "Vision", un récit édifiant sur l'effet de plate-forme intérieure
(Vous pouvez ignorer le préambule et commencer la lecture à la sous-rubrique "Présentation de la vision")
la source