بسم الله الرحمن الرحيم

.

لا شك أن البعض يكون جزء من عمله البرمجي متكرر وروتيني ، وطبع المبرمج أنه يحب التجديد وتحليل المعضلات وإيجاد حلول مبتكرة، وتجسيد هذا الابداع في شيفرته.

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

هنا يمكن التخلص من الملل الحاصل بتحويل الإبداع من تنفيذ هذه الأعمال إلى ابتكار طرق إبداعية للتخلص من هذه الأعمال المتكررة من خلال ابتكار أدوات تقوم بمثل هذه الأعمال.

أي وكأنك تصنع مبرمجين كومبارس يعينوك على أداء المهام الروتينية والتي لا تحتاج إلى ذكاء.

و لو نظرنا مثلا في بيئة الفيجوال ستوديو نجد مثلا أنه قد أضيفت أداة Linq To SQL و هي عبارة عن أداة بحيث تسحب الجداول من مخدم قواعد المعطيات وتسقطها عليها ليظهر لك مخطط الجداول والارتباطات بلغة UML Unified Modeling Language و هي لغة رسومية تدعى لغة النمذجة الموحدة والتي تستخدم في التعبير عن المسائل والتوصيفات بشكل رسومي

ليس هنا بيت القصيد ولكن ما يحدث خلف الكواليس بعد هذا الإسقاط هو المعني بالأمر حيث نجد أنه قد تولد ملف يحوي جميع الفئات التي تلزمنا للتعامل مع قاعدة البيانات و الجداول

وليس هذا فحسب بل يولد كل الخصائص التي تعبر عن الأعمدة وكذلك علاقات الترابط و يجعلها وفق بنية قوية متينة منظمة خالية من الأخطاء وتحسب حساب كثير من الأخطاء المحتملة ومجربة.

لم تقف الروعة عند هذا الحد بل تعدته أنه أي تعديل يطرأ على قاعدة البيانات ويتم إسقاطها مرة أخرى يتم تحديث الكود الموَلد تلقائيا.

فكم أراحنا هذا الأمر من كثير من عمليات النسخ واللصق والتعديل وجنبنا الأخطاء والنسيان.

طبعا العملية موجودة منذ Entity Framework ولكن Linq To SQL لها فلسفة جديدة توفق بين التعامل مع OOP وما يتعلق من أمور تخص منصة العمل و الذاكرة والموارد و السرعة والأداء و التعامل مع قاعدة البيانات الضخمة.

مرة أخرى ليس هذا بيت القصيد، ولكن قد يخطر ببال أحدنا لما لا نستفيد من هذه الأداة بشكل أوسع !

إن التفكير في استثمار هذه الأداة لا يأتي من الأداة نفسها لأنها أداة مغلقة ولا نستطيع استخدامها إلا في إطار ما سبق شرحه أعلاه.

ولكن يمكننا البحث بشكل أعمق لنرى من يقف وراء هذه الأداة أو بمعنى آخر أصح ما هي الآلية التي تعمل وفقها هذه الأداة.

الحقيقة أن هذه الأداة تقوم بشكل كبير على أداة أخرى اسمها TextTemplating أو مقولب النصوص وهي أداة تمكنك من توليد نصوص وفق قوالب معينة

طبعا لا تهدف إلى توليد نصوص ثابتة كلاسيكية وإلا لكنا عملنا حافظة ونسخنا منها.

ولكن الهدف هو توليد الأكواد الديناميكية أي يكون لدينا قالب ما، وفيه متحولات ثم نمرر له قيم مختلفة ليسندها إلى هذه المتحولات ثم يولد الكود

وعليه فإن الأداة TextTemplating هي أداة تُبرمِج برمجةً ،بحيث يتم تنفيذها بشكل مستقل أثناء التصميم.

وعليه فإنها تقوم بتوليد الكود أثناء التصميم.

بناء على هذه الأداة تم إنشاء نوع الملفات tt والتي هي Text Templating بحيث يمكن كتابة لغة خاصة بها يطلق عليها لغة T4 Template ويمكن استخدام لغة C# أو VB بها.

وهي شبيهة كثيرة أو تعتمد الأساس نفسه لملفات Aspx في مشروع ASP.Net والتي تستخدم فيها لغة #C أو VB لتوليد صفحات html

للأسف لم يتم دعم ملفات T4 كما Aspx وتركت نصوص مجردة أي لا يوجد تمييز بالألوان و تنقيح وتتبع ومراقبة قيم وربما هذا الذي جعلها قليلة الانتشار والاشتهار ولهذا لو فتحت ملف tt و كتبت به ستجده نص مجرد .

إلا أن هناك شركات كطرف ثالث قاموا بدعمها وتطويرها وإحداها وهي الأقوى حتى الآن شركة tangible

http://t4-editor.tangible-engineering.com/T4-Editor-Visual-T4-Editing.html

حيث دعمتها بشكل كبير بشكل متكامل مع الفيجوال ستوديو بحيث أصبح بالإمكان تمييز الكود والتنفيذ خطوط خطوة للتنقيح

وجعلت لها مكتبات خدمية.

شاهدو الفيديو التعريفي :

http://t4-editor.tangible-engineering.com/t4editor_tour.html

.

و لكي نستثمر هذه الأداة أي TT بالشكل الأمثل يمكن الاعتماد على ملفات أخرى تزود بالبيانات مثل ملفات XML أو ملفات إكسل أو ملفات نصية أو حتى قواعد بيانات

بحيث نصنع قالبا وتقوم بقراءة ملف المعطيات تقرأ منه وبناء عليه تولد الأكواد أو حتى يمكن تزويد البيانات ضمن القالب نفسه من خلال لائحة أو مصفوفة.

كتطبيق عملي قمت به أنا شخصيا هو إنشاء ملف إكس إم إل XML أقوم بوضع ما أريده وجعلت قالبا يقرأ ملفين أحدهما dbxml المتولد عن أداة Linq To SQL والآخر الذي أنشأته أنا ثم يقوم بتوليد أكواد متعلقة ومتناغمة مع جداول القاعدة كعمليات في طبقة منطق العمل Business Logic و إضافة ما يلزمني من إجراءات وخصائص لا تولدها أداة لينك تو سيكوال Linq To SQL وخصوصا لو أني أريد خصائص ليست من ضمن الجداول و تلزمني في جميع فئات الجداول أو إدراج مناهج متكررة في جميع الجداول مثل النسخ و التفريغ و تعيين القيم الافتراضية و التحقق من صحة المدخلات.

ومن ضمن خططي أنني سأحاول عندما أتفرغ إن شاء الله أن أوسع الموضوع ليكون بمثابة أداة تولد الواجهات بناء على الجداول وحقولها يعني شيء يشبه توليد الفورم في أكسيس.

من هنا نلاحظ أنه كلما تمكن المبرمج من إيجاد أداوات قوية كلما اختصر الوقت و تخلص من الأعمال الروتينية المملة وجعل كوده منظم وموثق و متين وخالي من الأخطاء.

أصبح لدي ملفات يحوي كل واحدة منها آلاف الأسطر ولا أتدخل بها نهائيا وإنما يتم توليدها فقط عند فتح ملف tt وأقوم بضغط زر الحفظ ليقوم بإعادة توليد كل هذا الكود بنقرة رز.

.

لا تترددو وادخلوا عالم T4 Templae الساحر.

.

عبد الرحمن أحمد

21/02/2014

.

دمتم بخير