كيف تتوقف عن فعل نفس الشيء

هل ترغب في تكرار العمليات الروتينية مرارا وتكرارا؟ لذلك أنا لا. ولكن في كل مرة في عميل SQL عند العمل مع تخزين Rostelecom، كان علي تسجيل جميع الصلات بين الجداول يدويًا. وهذا على الرغم من أنه في 90% من الحالات، تتطابق الحقول وشروط ضم الجداول من استعلام إلى استعلام! يبدو أن أي عميل SQL لديه وظائف الإكمال التلقائي، ولكن بالنسبة لوحدات التخزين لا تعمل دائمًا: فهي نادرًا ما تتضمن قيدًا فريدًا ومفتاحًا خارجيًا من أجل تحسين الأداء، وبدون ذلك لن يعرف البرنامج كيفية ارتباط الكيانات بكل منها. أخرى وما يمكن أن تفعله لتقدمه.

كيف تتوقف عن فعل نفس الشيء

بعد أن مررت بالإنكار والغضب والمساومة والاكتئاب والاقتراب من القبول، قررت - لماذا لا أحاول تنفيذ الملء التلقائي مع لعبة البلاك جاك بنفسي والقيام بذلك بالطريقة الصحيحة؟ أستخدم عميل dbeaver، المكتوب بلغة Java، وهو يحتوي على إصدار مجتمع مفتوح المصدر. لقد نضجت خطة بسيطة:

  1. ابحث عن الفئات في الكود المصدري المسؤولة عن الإكمال التلقائي
  2. قم بإعادة توجيههم للعمل مع بيانات التعريف الخارجية وسحب المعلومات حول الصلات من هناك
  3. ؟؟
  4. PROFIT

لقد اكتشفت النقطة الأولى بسرعة كبيرة - لقد وجدت طلبًا في أداة تعقب الأخطاء لضبط الملء التلقائي وفي العناصر ذات الصلة يقترف اكتشف فئة SQLCompletionAnalyzer. لقد نظرت إلى الكود وهذا ما أحتاجه. كل ما تبقى هو إعادة كتابته حتى يعمل كل شيء. انتظرت أمسية مجانية وبدأت أفكر في التنفيذ. قررت أن أكتب قواعد ارتباط الجدول (البيانات الوصفية) في json. لم تكن لدي أي خبرة عملية في العمل بهذا التنسيق وكان يُنظر إلى المهمة الحالية على أنها فرصة لتصحيح هذا الإغفال.

للعمل مع json قررت استخدام المكتبة json- بسيط من جوجل. وهنا بدأت المفاجآت. كما اتضح فيما بعد، تمت كتابة dbeaver كتطبيق حقيقي على منصة Eclipse باستخدام إطار عمل OSGi. بالنسبة للمطورين ذوي الخبرة، هذا الشيء يجعل من السهل إدارة التبعيات، ولكن بالنسبة لي كان الأمر أشبه بالسحر الأسود، والذي من الواضح أنني لم أكن مستعدًا له: كالعادة، أقوم باستيراد الفئات التي أحتاجها من مكتبة json-simple في رأس الفئة المحررة، حددها في pom.xml، وبعد ذلك يرفض المشروع بشكل قاطع التجميع بشكل طبيعي ويتعطل بسبب الأخطاء.

في النهاية، تمكنت من إصلاح أخطاء البناء: لقد قمت بتسجيل المكتبة ليس في pom.xml، ولكن في ملف البيان.mf، كما هو مطلوب بواسطة OSGI، مع تحديدها كحزمة استيراد. ليس الحل الأكثر جمالا، لكنه يعمل. ثم ظهرت المفاجأة التالية. إذا كنت تقوم بالتطوير في Intellij Idea، فلا يمكنك البدء والبدء في تصحيح أخطاء مشروعك استنادًا إلى منصة Eclipse: يجب أن يعاني المطور عديم الخبرة بما لا يقل عن معاناة المحلل دون إكمال الاستعلام. جاء مطورو القندس أنفسهم للإنقاذ، مشيرين في الويكي إلى جميع الرقصات باستخدام الدف التي يجب القيام بها. الأمر الأكثر إزعاجًا هو أنه حتى بعد كل هذه القرفصاء، لم يرغب المشروع في إطلاقه في تصحيح الأخطاء مع اتصال مكتبة 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

إضافة تعليق