سؤال

أنا أتطلع إلى القيام بشيء مثل هذا

public class ProductBiz: BizBase<Product> {

public List<String> BrokenRules {get;set;}

// Some kind of data + biz operation implementation

}

public static class ProductBizExtensions{

public ProductBiz Rule1(this ProductBiz prodBiz)
{}
public ProductBiz Rule2(this ProductBiz prodBiz)
{}

public bool ApplyRules (this ProductBiz prodBiz, Func<ProductBiz,bool> ruleset){}
}

ثم في رمز العميل استخدامه كما

productBiz.Rule1().Rule2();
productBiz.Rule2().Rule1();

أو

// create multicasted delegate of type Func<ProductBiz,bool> say rulesetDelegate

productBiz.ApplyRules(rulesetDelegate);

أردت فقط أن أسأل قبل أن أغوص عميقا وتغرق.

ما هي المزالق المحتملة مع هذا النهج ؟؟

شكرا لك مقدما

هل كانت مفيدة؟

المحلول

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

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

نصائح أخرى

إذا كنت تبحث في تغيير القواعد في وقت التشغيل، فقد ترغب في التفكير في شيء أشبه مهد أو مشابه.

الحل الخاص بك على ما يرام حتى تقوم بتجميعها، ثم تم تعيينه وأغلقه، من صوت تعليقاتك، تبحث عن مرونة وقت التشغيل.

انظر إلى تنفيذ قواعد الأعمال في CSLA http://lhotka.net/ وبعد في ذلك، حدد قاعدة ث / توقيع معين، وإضافته إلى مخزن قاعدة الكائن، إما على مستوى فئة أو مستوى مثيل. إن بناء جملة ما تحاول القيام به هو خارج وضعه، ولكن الطريقة (تحديد قواعد الأعمال عن طريق الأساليب الثابتة التي يتم تنفيذها في وقت التشغيل) هي بالضبط ما يفعله CSLA.

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