15

DSL | أنصح الإخوة بالاطلاع على مفهوم Domain Specific Language واختصاره DSL

لغات المجال المخصص Domain Specific Language والتي يرمز لها بالاختصار DSL

هي نمط من البرمجة يمكن تطبيقه على أي لغة وطبعا لا يتعارض مع أنماط البرمجة الأخرى مثل OOP أو البرمجة الوظيفية

وإنما يبنى عليها

حيث يمكن تشبيهه بأنه أسلوب لبناء أدوات و وظائف ثم استخدامها في البرمجة

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

هنا مثلا كيفية تطبيق هذا النمط من خلال لغة سي شارب #C

الكتاب الأشهر في هذا المجال لمؤلف هذا النمط مارتن فولر

كما يوجد مقاطع أخرى تبين كيفية تطبيقها على لغات أخرى فقد اعتمد بشكل كبير في لغة Ruby

المهم رغبت أن أرشدكم للاطلاع عليه فقد وجدته مفيد جدا

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

جزاك الله خيرا

ما أحوج المبرمج لتعلم أنماط التصميم ( خاصة للمشاريع الكبيرة )

هناك كتاب آخر لنفس المؤلف

ذكرتني بأحد مشاريع الجامعة. المادة كانت عن هندسة البرمجيات و خُيّرنا بين 1) مقارنة بين منتجين لشركة معينة لها هدف أو 2) انشاء DSL. قررت تحدي نفسي و اخترت DSL.

كان مشروعي اسمه Descriptive HTML، أو DeHTML اختصارا. هدف اللغة هو "وصف صفحة باللغة الانكليزية" و DSL سيحول الوصف إلى صفحة HTML. الوصف يدعم الجداول، forms, js, css, و إخفاء و إظهار العناصر باستخدام jQuery. استخدمت[1] xtext . اللغة كانت مصممة لمن لا خبرة له في تصميم الصفحات، و أضفنا خيارات لتوفير بيئة لمن له خبرة، كإضافة ID للـtag أو إضافة div. هذه صورة توضح جزء من الكود و ما ينتج في الأسفل

ملحوظة، كان من الأفضل وضع الموضوع في القسم العام أو البرمجة لأنه و كما أنت تفضلت و قلت

هي نمط من البرمجة يمكن تطبيقه على أي لغة وطبعا لا يتعارض مع أنماط البرمجة الأخرى مثل OOP أو البرمجة الوظيفية

[1]

ما شاء الله

بالنسبة لطرح الموضوع في المجتمع البرمجة العامة

فقد فكرت في هذا

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

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

فوضحت وجهة نظري

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

مع أنه كما ذكرت الأمر عام ويفيد كل اللغات

وعلى كل حال لو ارتأت الإدارة نقله فلتنقله

أنا من اعترضت ^^. لكن أرى أن مبدء الـ DSL عام :)

هذا أنت مرة أخرى يا "بروتوس" ツ

المرة القادمة سأضعها في إسالني ツ

أود الإشارة إلى أنني لم أعلم بهذا النمط إلا الأسبوع الماضي

إلا أنني سبق وطرحت مواضيع وأفكار تتقاطع مع هذا النمط ببعض الأجزاء

فمثلا فقرة Methods Chains الموجودة في هذا النمط وهو استدعاء المناهج خلف بعضها البعض وسميت سلاسل المناهج والتي تشبه شكل استفسارات Linq

سبق وطرحت أسلوب مشابه وكان أول مشاركة لي

لكنه لم يحظ باهتمام أحد

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

فمثلا استطعت إسناد كود إلى أحد الأحداث على الشكل التالي :

c.On().Key.F9.Up.With.Right.Shift.Do(() =>
{
    // Do Somthing
});

أي أن الكود داخل الأقواس سينفذ عند ضغط الزر F9 مع زر شيفت عندما يكون التركيز على الكونترول c

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

وكذلك فكرة آلة الحالات StateMachine المطبقة في مفهوم DSL

سبق وطرحت فكرة مشابهة وقد طبقتها ولله الحمد وطرحت الموضوع بذلك منذ ما يقرب الشهرين

أيضا لم تحظ باهتمام أحد

وتلا ذلك عدة أفكار ومفاهيم قمت بطرحها

مثل إطار عمل يوحد التعامل مع الوحدات المختلفة من خلال وظيفة واحدة تقوم على مبدأ الطلب والإجابة