سؤال

السؤال هو ربما مركب، واسمحوا لي أن أتوسع لها:

  • هل هو موجود مصمم (كعب / إطار / مصمم meta) لإنشاء القواعد و / أو القاعدة بناء على خصائص bool كائن .NET العامة؟ المحفوظة كأي DSL / BOO / ... إخراج.
  • هل من الممكن تجميع إخراج DSL إلى C # التعبيرات؟

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

إذا كنا قادرين على إعطاء مصمم بسيط للمستخدمين والاستيلاء على الإخراج، بعد ذلك بعد ترجمة / تجميعها إلى رمز C # / IL لدينا دورة طلب تغيير سريع.

أعلم أن مشكلتنا هي المحددة ولكن أي "الطوب في الجدار" هي موضع ترحيب!

مثال:

AC # فئة، موضوع:

public class TestA
{
     public bool B {...}
     public bool C {...}
}

في المصمم، يجب علينا إنشاء

  • أي نوع من مصممي الرسومات (أي القائمة المنسدلة لتحديد الخصائص العامة)

الإخراج في DSL:

If TestA.B AND TestA.C Then Return True;

الإخراج في C #:

if (testA.B && testA.C) { return true; }

تحديث رقم 1.

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

تحديث رقم 2

بناء على Tipp، حدقت مع أشجار التعبير. بعد بضعة أيام، ركضت إلى Dlinq - لم أكن أبدا من محبي Dlinq ولكن في هذه الحالة يناسب مشكلة المشكلة جيدا.

  • سهل التحليل (A> 2 و B <4) أو C = 5 في أشجار التعبير
  • من السهل إنشاء تعبيرات مثل هذا
  • من السهل جدا تسلسل / deserialize
  • واجهة المستخدم الرسومية على أساس FlowLayoutPanel يعمل بشكل جيد مثل "Builder Expression"
هل كانت مفيدة؟

المحلول

يمكنك بناء شيء مثل هذه نفسك.

يمكنك الحصول على قائمة بجميع الخصائص العامة لفصل باستخدام Type.getMembers ()

ومع ذلك، بدلا من إنشاء رمز C #، أود استخدام أشجار التعبير.

بهذه الطريقة لا تحتاج إلى إشراك compiler C # عندما يقوم المستخدمون بتغيير القواعد. بدلا من ذلك، يمكنك تخزين القواعد في قاعدة بيانات، قم بتحميلها في وقت التشغيل، ثم استخدم طريقة Expression.Compile () لإنشاء مفوض يمكنك استدعاءه لتشغيل التعليمات البرمجية.

تحديث:

في التعليقات، سأل شخص ما "ما هو الفرق بين تعبير الشعاب واللغات الخاصة بالمجال؟"

إليك الجواب:

أشجار التعبير ولغات خاصة المجال هي أشياء متعامدة.

تعد Expression Tress هي مجرد واجهة برمجة تطبيقات لتمثيل تعبيرات C #، والتي يمكن تحويلها بشكل ملائم إلى مفوض ديناميكيا في وقت التشغيل.

DSL، أو لغة مجال خاصة، هي لغة برمجة مصممة لحل فئة ضيقة من المشاكل.

هم، أساسا، أشياء مختلفة تماما.

يمكنك استخدام أشجار التعبير كجزء من تطبيق DSL إذا أردت. يستخدم Linq لهم لهذا الغرض.

في حالتك، لا تحتاج إلى DSL. ما تحتاجه هو واجهة مستخدم تقوم بإنشاء قواعد (مماثلة لأعمال Outlook Way)، ثم طريقة لتنفيذ هذه القواعد.

إنشاء UI هو مجرد تطوير واجهة المستخدم الطبيعية.

أشجار التعبير هي ما يمكنك استخدامه لتنفيذ القواعد.

نصائح أخرى

إنها حقيقة غير معروفة أن مصمم مؤسسة سير العمل لنظام التشغيل Windows ومحرك قواعده بشكل خاص يمكن استضافة في تطبيق نماذج Windows منفصلة عن Visual Studio. يمكن تقييم القواعد التي تأليف بهذه الطريقة بشكل مماثل مستقلا عن سير العمل الفعلي.

يرى إرشادات السيناريوهات WF: مصمم سير العمل إعادة الاستضافة و البرنامج التعليمي: استضافة مصمم WF.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top