Les modèles de domaine dans la base de données peuvent-ils être une solution durable?

13

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?

krystah
la source
Les modèles de domaine sont très étroitement liés à la conception pilotée par domaine. L'intérêt de la conception pilotée par domaine doit être exempt de la conception pilotée par les données, où les données (c'est-à-dire la base de données) sont au cœur de l'application. Ces modèles d'approche et de domaine ne vont pas vraiment de pair. Lorsque vous développez en suivant les pratiques de conception pilotées par domaine, vous ne vous souciez pas de la provenance des données, vous les utilisez simplement et exécutez une logique dessus dans votre couche métier.
Andy
Je ne sais pas trop ce que vous entendez par «garder la logique programmatique dans la base de données». Pouvez-vous clarifier cela?
Robert Harvey
La logique métier dans le code est exactement la bonne façon. La base de données doit être un magasin de données stupide, rien d'autre.
Andy
@Andy, je suppose que cela dépend. Peut-être que leur DBA est le centre de l'équipe et il conserve toute la logique commerciale dans la base de données, qui est ensuite interrogée par des appels de proc stockés stupides, extrait des données dans POCO, etc. sinon tout dans DB.
Vladislav Rastrusny
@VladislavRastrusny Quelle que soit la raison, conserver la logique métier dans la base de données est une conception extrêmement médiocre.
Andy

Réponses:

16

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")

Robert Harvey
la source
2
Lecture intéressante, je pourrais certainement dessiner des anologies. Je suis encore nouveau et resterai spectateur pour l'instant, mais je le garderai certainement sous l'objectif. Merci pour une bonne réponse!
krystah