Comment arrĂȘter de faire la mĂȘme chose

Vous aimez rĂ©pĂ©ter des opĂ©rations routiniĂšres encore et encore ? Moi pas. Mais Ă  chaque fois que je travaillais avec le stockage de Rostelecom dans le client SQL, je devais Ă©crire manuellement toutes les jointures entre les tables. Et pourtant, dans 90 % des cas, les champs et les conditions de jointure des tables Ă©taient les mĂȘmes d'une requĂȘte Ă  l'autre ! On pourrait penser que tout client SQL dispose de fonctions de saisie automatique, mais pour les stockages, cela ne fonctionne pas toujours : il est rare d’y trouver des contraintes d’unicitĂ© et des clĂ©s Ă©trangĂšres pour amĂ©liorer les performances, et sans cela, le programme ne peut pas savoir comment les entitĂ©s sont liĂ©es entre elles et ce qu'il peut vous proposer.

Comment arrĂȘter de faire la mĂȘme chose

AprĂšs avoir traversĂ© le dĂ©ni, la colĂšre, le marchandage, la dĂ©pression et en m’approchant de l’acceptation, j'ai dĂ©cidĂ© – pourquoi ne pas essayer de mettre en place la saisie automatique avec du blackjack et tout le reste ? J'utilise le client dbeaver, qui est Ă©crit en java, et il a une version communautaire avec un code source ouvert. J'ai conçu un plan simple :

  1. Trouver dans le code source les classes responsables de la saisie automatique
  2. Réorienter leur utilisation pour travailler avec des métadonnées externes et extraire les informations sur les jointures
  3. ??????
  4. PROFIT

J'ai rapidement compris le premier point — j'ai trouvĂ© dans le bug tracker une demande pour corriger la saisie automatique et dans le commit associĂ© j'ai dĂ©couvert la classe SQLCompletionAnalyzer. J'ai regardĂ© le code — c'est exactement ce qu'il me fallait. Il ne restait plus qu’à le réécrire pour que tout fonctionne. J'ai attendu une soirĂ©e libre et commencĂ© Ă  planifier la mise en Ɠuvre. J'ai dĂ©cidĂ© de conserver les rĂšgles de relations des tables (mĂ©tadonnĂ©es) en json. Je n'avais pas d'expĂ©rience pratique avec ce format et la tĂąche actuelle me semblait ĂȘtre une opportunitĂ© de corriger cette lacune. Pour travailler avec json, j'ai dĂ©cidĂ© d'utiliser la bibliothĂšque

json-simple de Google. C'est alors que les surprises ont commencé. Comme il s'est avéré, dbeaver, en tant qu'application sérieuse, est écrit sur la plateforme Eclipse en utilisant le cadre OSGi. Pour les développeurs expérimentés, cela offre une commodité de gestion des dépendances, mais pour moi, cela ressemblait davantage à de la magie noire à laquelle je n'étais clairement pas préparé : comme d'habitude, j'ai inscrit l'importation des classes dont j'avais besoin de la bibliothÚque json-simple en haut de la classe modifiée, je l'ai indiquée dans le pom.xml, aprÚs quoi le projet refuse catégoriquement de se construire correctement et s'effondre avec des erreurs. de Google. C'est là que les surprises ont commencé. Comme il s'est avéré, dbeaver, en tant qu'application sérieuse, est écrit sur la plateforme Eclipse en utilisant le framework OSGi. Pour les développeurs expérimentés, cet outil offre une gestion pratique des dépendances, mais pour moi, c'était plutÎt comme de la magie noire, à laquelle je n'étais clairement pas préparé : comme d'habitude, j'importe les classes dont j'ai besoin à partir de la bibliothÚque json-simple en haut de la classe modifiée, je la spécifie dans le pom.xml, aprÚs quoi le projet refuse catégoriquement de se compiler correctement et échoue avec des erreurs.

Pour rĂ©soudre les erreurs de build, j'ai en fait dĂ©clarĂ© la bibliothĂšque non pas dans pom.xml, mais dans le manifeste manifest.mf, comme l'exige OSGI, en l'indiquant comme import-package. Ce n'est pas la solution la plus Ă©lĂ©gante, mais cela fonctionne. Ensuite, une autre surprise est apparue. Si vous dĂ©veloppez dans IntelliJ IDEA, vous ne pouvez pas simplement lancer le dĂ©bogage de votre projet basĂ© sur Eclipse : un dĂ©veloppeur novice doit souffrir autant qu'un analyste sans complĂ©tion automatique des requĂȘtes. Les dĂ©veloppeurs de Beaver ont aidĂ© en indiquant dans la wiki tous les rituels nĂ©cessaires. Ce qui est particuliĂšrement frustrant, c'est qu'aprĂšs toutes ces dĂ©marches, le projet ne voulait toujours pas se lancer en mode dĂ©bogage avec une bibliothĂšque JSON connectĂ©e via import-package (bien qu'il se soit toujours bien construit dans le produit final).

À ce moment-lĂ , j'avais dĂ©jĂ  ressenti l'inconvĂ©nient d'utiliser JSON pour ma tĂąche - aprĂšs tout, les mĂ©tadonnĂ©es devaient ĂȘtre modifiĂ©es manuellement, et pour cela, le format XML est mieux adaptĂ©. Un deuxiĂšme argument en faveur de XML Ă©tait la prĂ©sence dans JDK de toutes les classes nĂ©cessaires, ce qui a permis d'arrĂȘter de lutter contre une bibliothĂšque externe. J'ai transfĂ©rĂ© avec plaisir toutes les mĂ©tadonnĂ©es de JSON Ă  XML et j'ai commencĂ© Ă  revoir la logique de l'autocomplĂ©tion.

Exemple de métadonnées

dim_account
        dim_partner
        
        
    
    
        dim_account
        dim_branch

En consĂ©quence, j'ai apportĂ© des modifications aux classes SQLUtils et SQLCompletionAnalyzer. L'idĂ©e est la suivante : si le programme n'a pas rĂ©ussi Ă  proposer des suggestions d'autocomplĂ©tion par la logique de base, il vĂ©rifie la disponibilitĂ© de joints possibles via un fichier XML externe. Dans ce fichier sont stockĂ©es des paires de tables avec indication des champs par lesquels ces tables doivent ĂȘtre reliĂ©es. Les restrictions sur les dates techniques d'entrĂ©e en vigueur des enregistrements eff_dttm et exp_dttm ainsi que le drapeau de suppression logique deleted_ind sont dĂ©finis par dĂ©faut.

Une fois les modifications apportĂ©es au code, une question s'est posĂ©e : qui va remplir le fichier de mĂ©tadonnĂ©es ? Il y a de nombreuses entitĂ©s dans le rĂ©fĂ©rentiel, il serait trop lourd de dĂ©finir toutes les relations soi-mĂȘme. Au final, j'ai dĂ©cidĂ© de confier cette tĂąche Ă  mes collĂšgues analystes. J'ai mis le fichier de mĂ©tadonnĂ©es dans svn, Ă  partir duquel se fait le checkout dans le rĂ©pertoire local avec le programme. Le principe est le suivant : une nouvelle entitĂ© apparaĂźt dans le rĂ©fĂ©rentiel ? Un analyste ajoute les jointures possibles dans le fichier, valide les modifications, les autres font le checkout chez eux et profitent de l'auto-remplissage fonctionnel : communautĂ©, accumulation de connaissances, tout ça. J'ai organisĂ© un atelier pour mes collĂšgues sur l'utilisation du programme et j'ai rĂ©digĂ© un article dans Confluence — maintenant, l'entreprise dispose d'un outil pratique supplĂ©mentaire.

Travailler sur cette fonctionnalitĂ© m'a fait comprendre qu'il ne faut pas craindre d'explorer des projets open source — en gĂ©nĂ©ral, leur architecture est claire, et mĂȘme des connaissances de base dans le langage suffisent pour expĂ©rimenter. Avec une certaine dose de persĂ©vĂ©rance, il est mĂȘme possible de se dĂ©barrasser des opĂ©rations rĂ©pĂ©titives dĂ©testĂ©es, gagnant ainsi du temps pour de nouvelles expĂ©riences.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster