Window.pipedriveLeadboosterConfig = { القاعدة: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', الإصدار: 2, } ؛(الدالة () { var w = نافذة إذا كان (w.LeadBooster) { console.warn('LeadBooster موجود بالفعل') } وإلا { { w.LeadBooster = { q: [], على: دالة (ن، ح) { { هذا.q.push({ t: 'o'، n: n، n: n، h: h }) }, الزناد: الدالة (n) { هذا.q.push({ t: 't'، n: n: n }) }, } } })() لغة روبي الخاصة بالمجال المحدد - The Codest
The Codest
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • الصناعات
    • التكنولوجيا المالية والمصرفية
    • E-commerce
    • أدتك
    • التكنولوجيا الصحية
    • التصنيع
    • الخدمات اللوجستية
    • السيارات
    • إنترنت الأشياء
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
السهم الخلفي العودة إلى الوراء
2018-12-14
تطوير البرمجيات

لغة روبي الخاصة بالمجال المحدد

بارتلوميج مازيارز

بالرجوع إلى التعريف، فإن DSL (اللغة الخاصة بالمجال) هي لغة حاسوبية متخصصة في مجال تطبيق معين. هذا يعني أنه تم تطويرها لتلبية احتياجات محددة.

من خلال قراءة هذه المقالة ستتعرف على ماهية DSL وما هو مشترك بينها وبين روبي.

DSL، قل مرحباً بك!

بالرجوع إلى التعريف، فإن DSL (اللغة الخاصة بالمجال) هي لغة حاسوبية متخصصة في مجال تطبيق معين. وهذا يعني أنه تم تطويرها لتلبية احتياجات محددة. هناك نوعان من DSL:

  • أن خارجي DSL التي تتطلب محلل بناء الجملة الخاص بها. قد تكون لغة SQL مثالًا معروفًا جيدًا - فهي تسمح بالتفاعل مع قاعدة البيانات بلغة لم يتم إنشاء قاعدة البيانات بها.

  • أن داخلي DSL التي لا تمتلك في حد ذاتها بناء جملة خاص بها ولكن بدلاً من ذلك تستخدم بناء جملة لغة برمجة معينة.

كما يمكنك التخمين على الأرجح أننا سنركز على النوع الثاني من DSL.

ما هي وظيفتها؟

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

توجيه القضبان

Rails.application.routes.routes.draw do
الجذر إلى: 'home#index'

الموارد :المستخدمين تفعل
احصل على :بحث، على: :مجموعة
النهاية
النهاية
```

كل شخص استخدم القضبان من قبل يعرف التكوين/المسارات.rb حيث نقوم بتعريف مسارات التطبيق (التعيين بين أفعال HTTP وعناوين URL لإجراءات وحدة التحكم). لكن هل تساءلت يومًا كيف يعمل؟ في الواقع، إنه مجرد كود روبي.

روبوت المصنع

FactoryBot.defined do
   المصنع :user do
     الشركة
     تسلسل(:بريد إلكتروني) { |i| "user_#{i}@test.com" }
     التسلسل(:الاسم الأول) { |i | "المستخدم #{i}" }
     الاسم الأخير 'اختبار'
     الدور 'مدير'
   النهاية
 النهاية

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

سيناترا

تتطلب "سيناترا/قاعدة

صنف WebApplication <سيناترا::قاعدة
الحصول على '/' القيام
'مرحبًا بالعالم'
النهاية
النهاية
```

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

قد تكون أمثلة DSL الأخرى أشعل النار, آر إس بيك أو السجل النشط. العنصر الرئيسي لكل DSL هو استخدام الكتل.

وقت البناء

حان الوقت لفهم ما يختبئ تحت الغطاء وكيف يمكن أن يبدو التنفيذ.

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

بسيطة المنتج قد يكون للتمثيل السمات التالية (المنتج.rb):

فئة المنتج
   attr_accessor :الاسم، :الوصف، :السعر
 نهاية

بدلاً من استخدام قاعدة بيانات حقيقية سنقوم فقط بمحاكاة عملها (قاعدة البيانات_منتجات_وهمية_قاعدة_قاعدة_بيانات_مزيفة):

صنف FakeProductsDatabase
   تعريف self.store(المنتج)
     يضع [اسم المنتج، وصف المنتج، سعر المنتج].join(" - ")
   نهاية
 ينتهي

والآن، سننشئ فئة ستكون مسؤولة عن قراءة ومعالجة ملف يحتوي على بيانات المنتجات (dsl/data_importer.rb):

الوحدة النمطية Dsl
صنف مستورد البيانات
بناء الجملة للوحدة النمطية
def add_product(&block)
قاعدة بيانات FakeProductsDatabase.store product(&block)
انتهى

  خاص

  تعريف المنتج(&block)
    ProductBuilder.new.tap { |b|b|b.b.instance_eval(&block)}.product
  نهاية
نهاية

تضمين بناء الجملة

def self.import_data(file_path)
  new.instance_eval ملف.read(file_path)
نهاية

النهاية
النهاية
```

يحتوي الفصل على طريقة تسمى استيراد_بيانات الذي يتوقع مسار ملف كوسيطة. تتم قراءة الملف ويتم تمرير النتيجة إلى مثيل_إيفال الذي يُستدعى على مثيل الصنف. ماذا تفعل هذه الطريقة؟ يقوم بتقييم السلسلة كرمز روبي ضمن سياق المثيل. هذا يعني ذاتي سيكون مثيلًا ل مستورد البيانات الفصل. بفضل حقيقة أننا قادرون على تحديد بناء الجملة/الكلمات الرئيسية المرغوبة (من أجل سهولة قراءة أفضل، يتم تعريف بناء الجملة كوحدة نمطية). عندما تكون إضافة_منتج يتم استدعاء الطريقة التي يتم تقييم الكتلة المعطاة للطريقة بواسطة منشئ المنتجات المثيل الذي يبني المنتج على سبيل المثال. منشئ المنتجات فئة موصوفة أدناه (dsl/product_builder.rb):

الوحدة النمطية Dsl
صنف ProductBuilder
ATTRIBUTUTES = %I[اسم الوصف السعر].freeze

أتر_قارئ :المنتج

تعريف التهيئة
  @product = Product.new.product.new
نهاية

ATTRIBUTUTES.every do |attribute|
  تعريف_الطريقة(السمة) do |arg = لا شيء، &block|
    القيمة = block.is_a؟(Proc)؟ block.call : arg
    المنتج.public_send("#{attribute}="، القيمة)
  النهاية
النهاية

النهاية
النهاية
```

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

والآن، لنقم بإضافة البرنامج النصي للاستيراد (استيراد_job.rb):

طلب نسبي 'dsl/dataimporter'
يتطلب نسبي 'dsl/productbuilder'
يتطلب نسبي 'قاعدة بيانات المنتجات المزيفة'
يتطلب 'منتج' نسبي

Dsl::DataImporter.import_data(ARGV[0])
```

وأخيرًا - باستخدام DSL الخاص بنا - ملف ببيانات المنتجات (dataset.rb):

''''روبي
إضافة_منتج do
اسم 'شاحن'
الوصف 'موفر للحياة'
السعر 19.99
النهاية

إضافة_منتج تفعل
اسم 'حطام سيارة'
الوصف { {"تحطمت في #{Time.now.now.strftime('%F %T'}}"} }
السعر 0.01
نهاية

إضافة_منتج do
الاسم 'Lockpick'
الوصف 'لن تغلق الأبواب'
السعر 7.50
النهاية
```

لاستيراد البيانات نحتاج فقط إلى تنفيذ أمر واحد:

روبي استيراد_job.rb dataset.rb

والنتيجة هي

شاحن - إنقاذ حياة - 19.99
 حطام السيارة - تحطمت في 2018-12-09-09 09:47:42 - 0.01
 قفل - يجب ألا تغلق الأبواب - 7.5

النجاح!

الخاتمة

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

هل أنت مهتم بالموضوع؟ إذا كان الأمر كذلك أخبرنا - سنخبرك عن DSL الذي أنشأناه مؤخرًا لتلبية المتطلبات في أحد مشاريعنا.

مقالات ذات صلة

تطوير البرمجيات

إنشاء تطبيقات ويب مستقبلية: رؤى من فريق خبراء The Codest

اكتشف كيف تتفوق شركة The Codest في إنشاء تطبيقات ويب تفاعلية قابلة للتطوير باستخدام أحدث التقنيات، وتقديم تجارب مستخدم سلسة عبر جميع المنصات. اكتشف كيف تقود خبرتنا التحول الرقمي والأعمال التجارية...

ذا كوديست
تطوير البرمجيات

أفضل 10 شركات لتطوير البرمجيات في لاتفيا

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

thecodest
الحلول المؤسسية وحلول التوسعة

أساسيات تطوير برمجيات جافا: دليل للاستعانة بمصادر خارجية بنجاح

استكشف هذا الدليل الأساسي حول تطوير برمجيات جافا outsourcing بنجاح لتعزيز الكفاءة والوصول إلى الخبرة وتحقيق نجاح المشروع باستخدام The Codest.

thecodest
تطوير البرمجيات

الدليل الشامل للاستعانة بمصادر خارجية في بولندا

إن الطفرة في outsourcing في بولندا مدفوعة بالتقدم الاقتصادي والتعليمي والتكنولوجي، مما يعزز نمو تكنولوجيا المعلومات والمناخ الملائم للأعمال.

ذا كوديست
الحلول المؤسسية وحلول التوسعة

الدليل الكامل لأدوات وتقنيات تدقيق تكنولوجيا المعلومات

تضمن عمليات تدقيق تكنولوجيا المعلومات وجود أنظمة آمنة وفعالة ومتوافقة. تعرف على المزيد حول أهميتها من خلال قراءة المقال كاملاً.

The Codest
ياكوب جاكوب جاكوبوفيتش CTO وشريك مؤسس CTO

اشترك في قاعدة معارفنا وابقَ على اطلاع على آخر المستجدات في قطاع تكنولوجيا المعلومات.

    نبذة عنا

    The Codest - شركة دولية لتطوير البرمجيات لها مراكز تقنية في بولندا.

    المملكة المتحدة - المقر الرئيسي

    • المكتب 303 ب، 182-184 شارع هاي ستريت نورث E6 2JA
      لندن، إنجلترا

    بولندا - مراكز التكنولوجيا المحلية

    • مجمع مكاتب فابريتشنا المكتبي، أليجا
      بوكوجو 18، 31-564 كراكوف
    • سفارة الأدمغة، كونستروكتورسكا
      11, 02-673 02-673 وارسو، بولندا

      The Codest

    • الصفحة الرئيسية
    • نبذة عنا
    • الخدمات
    • دراسات الحالة
    • اعرف كيف
    • الوظائف
    • القاموس

      الخدمات

    • استشاري
    • تطوير البرمجيات
    • تطوير الواجهة الخلفية
    • تطوير الواجهة الأمامية
    • Staff Augmentation
    • مطورو الواجهة الخلفية
    • مهندسو السحابة
    • مهندسو البيانات
    • أخرى
    • مهندسو ضمان الجودة

      الموارد

    • حقائق وأساطير حول التعاون مع شريك خارجي لتطوير البرمجيات
    • من الولايات المتحدة الأمريكية إلى أوروبا: لماذا تقرر الشركات الأمريكية الناشئة الانتقال إلى أوروبا؟
    • مقارنة مراكز تطوير التكنولوجيا في الخارج: تك أوفشور أوروبا (بولندا)، آسيان (الفلبين)، أوراسيا (تركيا)
    • ما هي أهم التحديات التي تواجه CTOs ومديري تكنولوجيا المعلومات؟
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • شروط استخدام الموقع الإلكتروني

    جميع الحقوق محفوظة © 2025 بواسطة The Codest. جميع الحقوق محفوظة.

    arArabic
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek arArabic