Comment convaincre mes collègues de ne pas utiliser d'ensembles de données pour le développement d'entreprise (.NET 2.0+)

StackOverflow https://stackoverflow.com/questions/37378

  •  09-06-2019
  •  | 
  •  

Question

Tous ceux avec qui je travaille sont obsédés par l’approche du développement d’entreprise centrée sur les données et détestent l’idée d’utiliser des collections/objets personnalisés.Quelle est la meilleure façon de les convaincre du contraire ?

Était-ce utile?

La solution

Si vous travaillez sur du code existant (par exemple, des applications portées de .NET 1.x vers 2.0 ou 3.5), ce serait une mauvaise idée de vous éloigner des ensembles de données.Pourquoi changer quelque chose qui fonctionne déjà ?

Toutefois, si vous créez une nouvelle application, vous pouvez citer quelques éléments :

  • Appel à l'expérience douleur dans la maintenance d'applications qui restent fidèles aux DataSets
  • Citer les avantages en termes de performances pour votre nouvelle approche
  • Appâtez-les avec un bon juste milieu.Passez à .NET 3.5 et faites la promotion de LINQ to SQL, par exemple :tout en restant fidèle à une architecture basée sur les données, il s'agit d'un énorme changement par rapport aux ensembles de données indexés par chaînes, et applique...voilà !Collections personnalisées - d'une manière qui leur est cachée.

Ce qui est important, c'est que quelle que soit l'approche que vous utilisez, vous restiez cohérent et vous soyez complètement honnête avec les avantages et les inconvénients de vos approches.

Si tout le reste échoue (par exemple, vous avez une équipe de développement qui refuse catégoriquement de s'écarter des anciennes pratiques et est sceptique quant à l'apprentissage de nouvelles choses), c'est un problème. signe très, très clair que vous êtes devenu trop grand pour votre équipe, il est temps de quitter votre entreprise !

Autres conseils

Faites-le par l’exemple et avancez avec légèreté.Tout ce qui est plus fort ne fera que vous éloigner du reste de l’équipe.

N'oubliez pas d'envisager la possibilité qu'ils soient sur quelque chose que vous avez manqué.Faire partie d’une équipe, c’est apprendre et enseigner à tour de rôle.

Personne ne possède à lui seul toutes les réponses.

N'oubliez pas d'envisager la possibilité qu'ils soient sur quelque chose que vous avez manqué.Faire partie d’une équipe, c’est apprendre et enseigner à tour de rôle.

Appuyé.L’idée selon laquelle le « développement de l’entreprise » est en quelque sorte distinct du développement normal (et l’implication est généralement « plus importante que ») me contrarie vraiment.

S'il y a vraiment un avantage à utiliser une technologie, vous devrez alors dresser une liste réfléchie de tous les avantages et inconvénients qui se produiraient si vous changiez.
Présentez cette liste à vos collègues avec des explications et des exemples pour chacun.

Vous devez être réaliste lors de la création de cette liste.Vous ne pouvez pas simplement dire « Cela nous fait gagner beaucoup de temps !!!GAGNEZ !! » sans aborder le fait que parfois cela prendra PLUS de temps, nécessitera X mois pour se mettre à niveau sur la nouvelle technologie, etc.Il faut montrer des exemples concrets où cela permettra de gagner du temps, et exactement comment.

De même, vous ne pouvez pas simplement éluder les inconvénients comme s'ils n'avaient pas d'importance, vos collègues volonté je vous appelle à ce sujet.
Si vous ne faites pas ces choses, ou si vous donnez simplement l'impression de promouvoir ce que vous aimez personnellement, personne ne vous prendra au sérieux et vous aurez simplement la réputation d'être un gars plein d'enthousiasme et d'énergie, mais qui n'en a aucune idée. à propos de tout.

D'AILLEURS.Méfiez-vous de cette arnaque particulière.Cela l'emportera sur tout, à moins que vous n'ayez un parcelle de dossiers solides pour toutes vos autres affaires :

  • Nécessite plus de 12 mois de travail pour porter notre code existant.Tu as perdu.

Bien sûr, « cela dépend » de la situation.Parfois, les DataSets ou DataTables sont plus adaptés, comme s'il s'agissait vraiment d'une logique métier assez légère, d'une hiérarchie plate d'entités/enregistrements ou comportant certaines capacités de gestion de versions.

Les collections d'objets personnalisés brillent lorsque vous souhaitez implémenter un hiérarchie/graphique profond d'objets qui ne peuvent pas être représentés efficacement dans des tableaux plats 2D.Ce que vous pouvez démontrer, c'est un grand graphique d'objets et faire en sorte que certains événements se propagent dans les branches appropriées sans invoquer d'objets inappropriés dans d'autres branches.De cette façon, il n'est pas nécessaire de parcourir ou de sélectionner chaque DataTable juste pour obtenir les enregistrements enfants.

Par exemple, dans un projet auquel j'ai participé il y a deux ans et demi, il existait un module d'interface utilisateur censé afficher les questions et les contrôles de réponse dans un seul DataGrid WinForms (pour être plus précis, il s'agissait de l'UltraGrid d'Infragistics).Quelques exigences plus délicates

  • Le contrôle de réponse pour une question peut être rien - zone de texte, options de case à cocher, options de boutons radio, listes déroulantes ou même faire apparaître une boîte de dialogue personnalisée pouvant extraire davantage de données d'un service Web.
  • En fonction de la réponse de l'utilisateur, davantage de sous-questions peuvent apparaître directement sous la question parent.Si une réponse différente est donnée plus tard, elle devrait exposer un autre ensemble de sous-questions (le cas échéant) liées à cette réponse.

L'implémentation originale a été entièrement écrite en DataSets, DataTables et tableaux.La quantité de boucles à travers les centaines de lignes pour plusieurs tables était purement hallucinante.Cela n'a pas aidé le programmeur issu d'un environnement C++ qui tentait de réf tout (bonjour, les objets vivant dans le tas utilisent variables de référence, comme des pointeurs !).Personne, pas même le programmeur initial, ne peut expliquer pourquoi le code fait ce qu'il fait.Je suis arrivé sur la scène plus de six mois après, et elle était toujours inondée de bugs.Pas étonnant que le développeur de 2e génération dont j'ai succédé ait décidé de démissionner.

Deux mois de travail pour réparer ce désordre chaotique, j'ai pris sur moi de repenser l'ensemble du module en un graphe orienté objet pour résoudre ce problème.oui, avec des classes abstraites (pour rendre différents contrôles de réponse sur une cellule de grille en fonction du type de question), des délégués et des événements.Le résultat final était une grille de données 2D liée à une profonde hiérarchie de questions, naturellement triées selon la disposition parent-enfant.Lorsque la réponse d'une question parent changeait, cela déclencherait un événement pour les questions des enfants et ils afficheraient/masqueraient automatiquement leurs lignes dans la grille en fonction de la réponse du parent.Seuls les objets de question sur ce chemin ont été affectés.La réactivité de l'interface utilisateur de cette solution par rapport à l'ancienne méthode était de plusieurs ordres de grandeur.

Ironiquement, je voulais poster une question qui était exactement le contraire de celle-ci.La plupart des programmeurs avec lesquels j'ai travaillé ont opté pour l'approche des objets/collections de données personnalisées.Cela me brise le cœur de voir quelqu'un avec sa définition de table SQL Server ouverte sur un moniteur, tapant lentement une classe de wrapper de ligne correspondante dans Visual Studio sur un autre moniteur (avec des propriétés privées et des getters-setters pour chaque colonne).C'est particulièrement pénible s'ils sont également enclins à créer des tableaux de 60 colonnes.Je sais qu'il existe des systèmes ORM qui peuvent créer ces classes automatiquement, mais j'ai vu l'approche manuelle utilisée beaucoup plus fréquemment.

Les choix techniques impliquent toujours des compromis entre les avantages et les inconvénients des options disponibles.L'approche centrée sur DataSet a ses avantages (représentation en mémoire des données réelles de la base de données sous la forme d'une table de base de données, classes écrites par des personnes qui savent ce qu'elles font, familières à un grand nombre de développeurs, etc.), tout comme les objets de données personnalisés. (vérification du type de compilation, les utilisateurs n'ont pas besoin d'apprendre SQL, etc.).Si tous les autres membres de votre entreprise empruntent la voie DataSet, il est au moins techniquement possible que les DataSets soient le meilleur choix pour ce qu'ils font.

Les ensembles de données/tableaux ne sont pas si mauvais, n'est-ce pas ?

Le meilleur conseil que je puisse donner est de l'utiliser autant que possible dans votre propre code, et j'espère que grâce aux évaluations par les pairs et aux corrections de bugs, les autres développeurs verront comment le code devient plus lisible.(assurez-vous d'insister sur le point lorsque ces événements se produisent).

En fin de compte, si le code fonctionne, le reste est à mon avis une question de sémantique.

Je suppose que vous pouvez essayer de vendre l'idée des outils de cartographie et de cartographie O/R.L’avantage de traiter les lignes comme des objets est assez puissant.

Je pense que vous devriez vous concentrer sur la performance.Si vous pouvez créer une application qui montre la différence de performances lors de l'utilisation de DataSets et d'entités personnalisées.Essayez également de leur montrer les principes de Domain Driven Design et comment ils s’intègrent aux cadres d’entités.

N'en faites pas une discussion sur la religion ou la foi.C'est difficile à gagner (et ce n'est pas ce que vous voulez de toute façon)

Ne le formulez pas comme vous venez de le faire dans votre question.Le problème n’est pas d’amener quiconque à admettre que telle ou telle manière est la manière générale de fonctionner.Vous devriez parler de la façon dont chacun doit réfléchir pour faire le bon choix à un moment donné.donnez un exemple pour savoir quand utiliser dataSet et quand ne pas le faire.

J'ai eu des développeurs qui utilisaient des dataTables pour stocker les données qu'ils récupéraient de la base de données, puis disposaient d'un code de logique métier utilisant ce dataTable...Et je leur ai montré comment j'avais réduit le temps de chargement d'une page de 7 secondes à 100 % CPU (sur le serveur Web) à ne pas pouvoir voir du tout la ligne CPU bouger.en changeant l'objet mémoire de dataTable en table de hachage.

Alors prenez un exemple ou un cas où vous pensez qu'il est préférable de le mettre en œuvre différemment et gagnez cette bataille.Ne menez pas une guerre de haut niveau...

Si l’interopérabilité est/sera une préoccupation à long terme, DataSet n’est certainement pas la bonne direction.Vous POUVEZ exposer des DataSets/DataTables sur un service, mais si vous DEVRIEZ ou est discutable.Si vous parlez de .NET->.NET, vous êtes probablement d'accord, sinon vous allez avoir un développeur client très mécontent de l'autre côté de la barrière qui consommera votre service.

Vous ne pouvez pas les convaincre du contraire.Choisissez un défi plus petit ou passez à une autre organisation.Si votre manager vous respecte, voyez si vous pouvez réaliser un projet dans le style axé sur le domaine comme une sorte d'essai technologique.

Si vous pouvez créer un profil, faites-le et créez un profil.Les ensembles de données sont plus lourds qu'un simple Collection<T>

Les DataReaders sont plus rapides que ceux utilisant des adaptateurs...

Changer le comportement d'un objet est beaucoup plus facile que de masser un ensemble de données

De toute façon:Faites-le, demandez pardon et non la permission.

La plupart des programmeurs n'aiment pas sortir de leur zone de confort (notez que l'intersection de l'ensemble « la plupart des programmeurs » et de l'ensemble « Débordement de pile » est probablement l'ensemble vide)."Si cela a fonctionné avant (ou même simplement fonctionné), continuez à le faire".Le projet sur lequel je suis actuellement a nécessité beaucoup d'arguments pour amener les programmeurs plus âgés à utiliser XML/schémas/ensembles de données au lieu de simplement des fichiers CSV (la version précédente du logiciel utilisait des fichiers CSV).Ce n'est pas parfait, les schémas ne sont pas assez robustes pour valider les données.Mais c'est un pas dans la bonne direction.Le code que je développe utilise des abstractions OO sur les ensembles de données plutôt que de transmettre des objets d'ensemble de données.En général, il est préférable d’enseigner par l’exemple, une petite étape à la fois.

Il y a déjà de très bons conseils ici mais vous aurez encore du pain sur la planche pour convaincre vos collègues si tout ce que vous avez pour vous soutenir est quelques commentaires de soutien sur stackoverflow.Et s’ils sont aussi sceptiques qu’ils le paraissent, vous aurez besoin de plus de munitions.Tout d'abord, procurez-vous une copie des « Patterns of Enterprise Architecture » ​​de Martin Fowler, qui contient une analyse détaillée d'une variété de techniques d'accès aux données.Lis le.Ensuite, forcez-les tous à le lire.

Travail accompli.

centré sur les données signifie moins de complexité du code.

les objets personnalisés signifient potentiellement des centaines d'objets supplémentaires à organiser, à entretenir et avec lesquels vivre généralement.Cela va aussi être un peu plus rapide.

Je pense que c'est vraiment une question de complexité du code et de performances, à laquelle les besoins de votre application peuvent répondre.

Commencer petit.Existe-t-il une application utilitaire que vous pouvez utiliser pour illustrer votre propos ?

Par exemple, là où je travaillais, l'application principale avait un processus de construction compliqué, impliquant la modification des fichiers de configuration, l'installation d'un service, etc.

J'ai donc écrit une application pour automatiser le processus de construction.Il avait une interface utilisateur WinForms rudimentaire.Mais comme nous évoluions vers WPF, je l'ai changé en une interface utilisateur WPF, tout en conservant également l'interface utilisateur WinForms, grâce à Model-View-Presenter.Pour ceux qui ne connaissaient pas Model-View-Presenter, c'était un exemple facilement compréhensible auquel ils pouvaient se référer.

De même, trouvez quelque chose de petit où vous pourrez leur montrer à quoi ressemblerait une application non-DataSet sans avoir à faire un investissement de développement majeur.

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