Migration de ORM .NET personnalisé en cadre d'entité / Dapper

asp.net-web-api c# dapper migration mysql

Question

J'ai hérité d'un projet à grande échelle et un peu labyrinthe. Le trafic est suffisamment important pour vouloir optimiser l'accès aux données. J'ai donc commencé à convertir certains services WCF appelés par JavaScript en Web API.

Malheureusement, les clés primaires de la base de données (et non l'incrémentation automatique) sont également gérées par un ORM personnalisé en interrogeant une fonction MySQL qui renvoie le prochain ensemble d'identifiants à utiliser. L'ORM les met ensuite en cache et les met à la disposition de l'application. La base de données elle-même est un volume croissant de 2 To de données, ce qui rendrait les temps d'arrêt importants.

J'avais prévu d'utiliser Dapper car je jouissais de la facilité et de la performance par le passé, mais éliminer cette base de données de cet ORM personnalisé semble décourageant et sujet aux erreurs.

Des questions:

  • Quelqu'un at-il des conseils pour aborder un projet à grande échelle?
  • Dois-je me concentrer davantage sur la migration de la base de données vers une structure de données entièrement nouvelle? (il faut aussi une normalisation importante!)

Réponse acceptée

Mon humble avis :

Une règle de base lorsque vous traitez le code hérité est la suivante: si quelque chose fonctionne, conservez-le. Si nécessaire, effectuez un changement ou une amélioration . Les principales raisons sont les suivantes:

  • L'effet de la refonte est presque nul lorsque vous souhaitez ajouter une valeur métier au système.
  • Le système, bon ou mauvais, fonctionne. Peu importe le soin que vous avez, vous pouvez toujours faire quelque chose avec un changement structurel.

De plus, cela dépend beaucoup du plan de l'entreprise pour les raisons de changer (ajouter une fonctionnalité, corriger un bogue, améliorer la conception ou optimiser l'utilisation des ressources). Mon humble expérience me dit que le temps et le budget sont très importants, et même si nous voulons toujours revoir (ou dans certains cas, coder à partir de rien), le plus important est les objectifs commerciaux et la valeur ajoutée.

Dans votre cas, il n'est peut-être pas nécessaire de changer tous les ORM. Si vous dites que les identifiants sont mis en cache, une meilleure approche serait de modifier les PK, en y ajoutant la propriété identity (avec la valeur de départ correcte sur chaque table). Après cela, vous pouvez supprimer cette partie du code qui obtient les prochains identifiants.

Dans certains cas, une base de données non normalisée a ses raisons. J'ai vu des cas dans lesquels les données sont copiées dans les tables pour éviter la jointure, ce qui affecte les performances. Je parle de millions de disques ...

Raisons de modifier l'ORM: peut-être si elle est inefficace ou si elle ne ferme pas le code non géré (dans ce cas, une meilleure approche consiste à implémenter l'interface IDisposable). Si cela fonctionne, une meilleure approche consiste peut-être à utiliser un nouvel ORM une fois que vous avez besoin de créer de nouvelles fonctionnalités. Si le projet a besoin d'un refactoring à des fins d'optimisation, la modification doit être appliquée dans les goulots d'étranglement et non dans l'ensemble du code.

Il y a beaucoup de discussions sur le sujet. Une bonne ressource recommandée est «Travailler efficacement avec le code hérité» par Michael Feathers, ou «Commencer à utiliser DDD lorsque entouré de systèmes hérités» par Eric Evans.

Salutations!




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi