Πώς να σταματήσετε να κάνετε το ίδιο πράγμα

Σας αρέσει να επαναλαμβάνετε λειτουργίες ρουτίνας ξανά και ξανά; Οπότε δεν το κάνω. Αλλά κάθε φορά στον πελάτη SQL όταν εργαζόμουν με τον αποθηκευτικό χώρο της Rostelecom, έπρεπε να καταχωρήσω χειροκίνητα όλες τις συνδέσεις μεταξύ των πινάκων. Και αυτό παρά το γεγονός ότι στο 90% των περιπτώσεων τα πεδία και οι προϋποθέσεις για ένταξη πινάκων συνέπιπταν από αίτημα σε αίτημα! Φαίνεται ότι οποιοσδήποτε πελάτης SQL έχει λειτουργίες αυτόματης συμπλήρωσης, αλλά για αποθηκευτικούς χώρους δεν λειτουργεί πάντα: σπάνια περιλαμβάνουν μοναδικό περιορισμό και ξένο κλειδί για τη βελτίωση της απόδοσης και χωρίς αυτό το πρόγραμμα δεν θα γνωρίζει πώς σχετίζονται οι οντότητες με κάθε άλλα και τι μπορεί να κάνει για εσάς.

Πώς να σταματήσετε να κάνετε το ίδιο πράγμα

Έχοντας περάσει από άρνηση, θυμό, διαπραγματεύσεις, κατάθλιψη και πλησιάζοντας την αποδοχή, αποφάσισα - γιατί να μην προσπαθήσω να εφαρμόσω την αυτόματη συμπλήρωση με blackjack και να το κάνω με τον σωστό τρόπο; Χρησιμοποιώ τον πελάτη dbeaver, γραμμένο σε java, έχει μια έκδοση κοινότητας ανοιχτού κώδικα. Ένα απλό σχέδιο έχει ωριμάσει:

  1. Βρείτε τάξεις στον πηγαίο κώδικα που είναι υπεύθυνες για την αυτόματη συμπλήρωση
  2. Ανακατευθύνετέ τους να εργαστούν με εξωτερικά μεταδεδομένα και αντλήστε πληροφορίες σχετικά με τις ενώσεις από εκεί
  3. ??
  4. ΚΈΡΔΟΣ

Κατάλαβα το πρώτο σημείο αρκετά γρήγορα - βρήκα ένα αίτημα στον εντοπισμό σφαλμάτων για προσαρμογή της αυτόματης συμπλήρωσης και στα σχετικά διαπράττω ανακάλυψε την κλάση SQLCompletionAnalyzer. Κοίταξα τον κωδικό και είναι αυτό που χρειάζομαι. Το μόνο που μένει είναι να το ξαναγράψουμε για να λειτουργήσουν όλα. Περίμενα μια δωρεάν βραδιά και άρχισα να σκέφτομαι την υλοποίηση. Αποφάσισα να γράψω κανόνες σύνδεσης πίνακα (μεταδεδομένα) σε json. Δεν είχα καμία πρακτική εμπειρία εργασίας με αυτήν τη μορφή και η τρέχουσα εργασία θεωρήθηκε ως ευκαιρία για να διορθωθεί αυτή η παράλειψη.

Για να δουλέψω με το json αποφάσισα να χρησιμοποιήσω τη βιβλιοθήκη json-απλό από την Google. Εδώ ξεκίνησαν οι εκπλήξεις. Όπως αποδείχθηκε, το dbeaver, ως αληθινή εφαρμογή, γράφτηκε στην πλατφόρμα Eclipse χρησιμοποιώντας το πλαίσιο OSGi. Για έμπειρους προγραμματιστές, αυτό το πράγμα διευκολύνει τη διαχείριση των εξαρτήσεων, αλλά για μένα ήταν περισσότερο σαν σκοτεινή μαγεία, για την οποία σαφώς δεν ήμουν έτοιμος: ως συνήθως, εισάγω τις κλάσεις που χρειάζομαι από τη βιβλιοθήκη json-simple στην κεφαλίδα του την επεξεργασμένη κλάση, καθορίστε την στο πομ. xml, μετά την οποία το έργο αρνείται κατηγορηματικά να συναρμολογηθεί κανονικά και διακόπτεται με σφάλματα.

Στο τέλος, κατάφερα να διορθώσω τα λάθη κατασκευής: κατέγραψα τη βιβλιοθήκη όχι στο pom.xml, αλλά στο manifest.mf manifest, όπως απαιτεί το OSGI, ενώ το καθόρισα ως import-package. Δεν είναι η πιο όμορφη λύση, αλλά λειτουργεί. Τότε εμφανίστηκε η επόμενη έκπληξη. Εάν αναπτύσσετε στο Intellij Idea, δεν μπορείτε απλώς να ξεκινήσετε τον εντοπισμό σφαλμάτων του έργου σας με βάση την πλατφόρμα eclipse: ένας άπειρος προγραμματιστής θα πρέπει να υποφέρει όχι λιγότερο από έναν αναλυτή χωρίς την ολοκλήρωση του ερωτήματος. Οι ίδιοι οι προγραμματιστές του κάστορα ήρθαν στη διάσωση, υποδεικνύοντας στο wiki όλους τους χορούς με ένα ντέφι που πρέπει να γίνουν. Το πιο ενοχλητικό είναι ότι ακόμη και μετά από όλα αυτά τα squats, το έργο δεν ήθελε να ξεκινήσει σε εντοπισμό σφαλμάτων με τη βιβλιοθήκη json συνδεδεμένη μέσω πακέτου εισαγωγής (παρά το γεγονός ότι συναρμολογήθηκε με επιτυχία στο τελικό προϊόν).

Μέχρι εκείνη τη στιγμή, είχα ήδη συνειδητοποιήσει την ταλαιπωρία της χρήσης json για την εργασία μου - τελικά, τα μεταδεδομένα έπρεπε να επεξεργάζονταν χειροκίνητα και η μορφή xml είναι καλύτερα κατάλληλη για αυτό. Το δεύτερο επιχείρημα υπέρ του xml ήταν η παρουσία όλων των απαραίτητων κλάσεων στο JDK, γεγονός που κατέστησε δυνατή τη διακοπή της μάχης με μια εξωτερική βιβλιοθήκη. Με μεγάλη μου χαρά, μετέφερα όλα τα μεταδεδομένα από το json στο xml και άρχισα να επεξεργάζομαι τη λογική αυτόματης συμπλήρωσης.

Παράδειγμα μεταδεδομένων

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tableRelations>
    <tableRelation>
        <leftTable>dim_account</leftTable>
        <rightTable>dim_partner</rightTable>
        <joinColumnPair leftColumn="partner_key" rightColumn="partner_key"/>
        <joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
    </tableRelation>
    <tableRelation>
        <leftTable>dim_account</leftTable>
        <rightTable>dim_branch</rightTable>
        <joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
        <joinColumnPair leftColumn="branch_key" rightColumn="branch_key"/>
    </tableRelation>
</tableRelations>

Ως αποτέλεσμα εγώ έκανε αλλαγές στις κλάσεις SQLUtils και SQLCompletionAnalyzer. Η ιδέα είναι η εξής: εάν το πρόγραμμα δεν μπόρεσε να βρει κατάλληλες προτάσεις αυτόματης συμπλήρωσης χρησιμοποιώντας τη βασική λογική, τότε ελέγχει για την παρουσία πιθανών συνδέσεων χρησιμοποιώντας ένα εξωτερικό αρχείο xml. Το ίδιο το αρχείο αποθηκεύει ζεύγη πινάκων που υποδεικνύουν τα πεδία με τα οποία πρέπει να συνδεθούν αυτοί οι πίνακες. Οι περιορισμοί στις ημερομηνίες τεχνικής εγκυρότητας των εγγραφών eff_dttm και exp_dttm και η σημαία λογικής διαγραφής deleted_ind ορίζονται από προεπιλογή.

Όταν έγιναν αλλαγές στον κώδικα, προέκυψε το ερώτημα - ποιος θα γεμίσει το αρχείο με μεταδεδομένα; Υπάρχουν πολλές οντότητες στο αποθετήριο, είναι ακριβό να καταχωρήσετε μόνοι σας όλες τις συνδέσεις. Ως αποτέλεσμα, αποφάσισα να αναθέσω αυτό το καθήκον στους συναδέλφους μου αναλυτές. Δημοσίευσα το αρχείο μεταδεδομένων στο svn, από όπου γίνεται ταμείο στον τοπικό κατάλογο με το πρόγραμμα. Η αρχή είναι η εξής: εμφανίστηκε μια νέα οντότητα στο αποθετήριο; Ένας αναλυτής εισάγει πιθανές ενώσεις στο αρχείο, πραγματοποιεί αλλαγές, οι υπόλοιποι ελέγχουν μόνοι τους και απολαμβάνουν την αυτόματη ολοκλήρωση εργασίας: κοινότητα, συσσώρευση γνώσης και όλα αυτά. Διεξήγαγε ένα εργαστήριο σχετικά με τη χρήση του προγράμματος για συναδέλφους, έγραψε ένα άρθρο στο Confluence - τώρα η εταιρεία έχει ένα πιο βολικό εργαλείο.

Η εργασία σε αυτό το χαρακτηριστικό μου έδωσε την κατανόηση ότι δεν υπάρχει λόγος να φοβάμαι να ασχοληθώ με έργα ανοιχτού κώδικα - κατά κανόνα, έχουν μια σαφή αρχιτεκτονική και ακόμη και η βασική γνώση της γλώσσας θα είναι αρκετή για πειράματα. Και με ένα ορισμένο ποσό επιμονής, θα μπορέσετε ακόμη και να απαλλαγείτε από μισητές λειτουργίες ρουτίνας, εξοικονομώντας χρόνο για νέα πειράματα.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο