2008-09-15 15 views
6

मुझे अक्सर उपयोगकर्ता-संपादन योग्य कुछ प्रकार की नियम प्रणाली को लागू करने की आवश्यकता होती है - आवश्यकताएं आम तौर पर पर्याप्त होती हैं कि एक ही प्रणाली सीधे लागू नहीं होती है, इसलिए मैं अक्सर एक ही समस्या में भाग लेता हूं - मैं कैसे डिजाइन करूं शासन प्रणाली है किनियम प्रणालियों को डिजाइन करने के लिए अच्छे संदर्भ/सुझाव?

  1. पोषणीय
  2. है ठीक से उपयोग
  3. आसानी से बढ़ाया है की आसानी के साथ अभिव्यक्ति को संतुलित करता है (/ जब मैं (2) गलत है)।

मुझे लगता है कि नियम प्रणाली/डीएसएल बेहद मूल्यवान हैं, लेकिन मुझे उनकी डिजाइन करने की क्षमता के साथ सहज महसूस नहीं होता है।

आपको क्या संदर्भ/सुझाव देना है जो इसे आसान बनाने में मदद कर सकता है?
समस्याओं की प्रकृति की वजह से मैं चल रहा हूं, मौजूदा भाषाएं आम तौर पर लागू नहीं होती हैं। (उदाहरण के लिए, आप की आवश्यकता नहीं है कि सामान्य कंप्यूटर उपयोगकर्ता ईमेल फ़िल्टर लिखने के लिए पाइथन सीखें।) इसी तरह, भाषा, जैसे JESS, केवल आंशिक समाधान हैं, क्योंकि कुछ (सरल) उपयोगकर्ता इंटरफ़ेस की ज़रूरत है नियम भाषा के शीर्ष पर बनाया जाना चाहिए ताकि गैर-प्रोग्रामर इसका उपयोग कर सकें। इस इंटरफ़ेस में हमेशा कुछ विशेषताओं को हटाने, या उन सुविधाओं को उपयोग करने में अधिक कठिन बनाना शामिल है, और process ऊपर वर्णित वही समस्याएं उत्पन्न करता है।

संपादित करें: स्पष्ट करने के सवाल के बारे में डिजाइन एक नियम के इंजन, मैं पहले से बने नियम इंजन के लिए नहीं देख रहा हूँ। यदि आप एक नियम इंजन का सुझाव देते हैं, तो कृपया बताएं कि यह कैसे अच्छे डिजाइन निर्णय लेने के बारे में प्रश्न को संबोधित करता है।

उत्तर

0

एक बात मैं पाया है कि अभिव्यक्ति पेड़ के रूप में नियमों को परिभाषित करने में सक्षम होने के कार्यान्वयन बनाता है इतना है सरल होते हैं। जैसा कि आपने सही ढंग से उल्लेख किया है, प्रोजेक्ट से प्रोजेक्ट की आवश्यकताएं इतनी अलग हैं कि आपको हर बार पुन: कार्यान्वित करना होगा। एक्सप्रेशन पेड़ विज़िटर पैटर्न की तरह कुछ के साथ मिलकर बहुत (बिना पन इरादे) अभिव्यक्तित्मक ढांचे के लिए बनाते हैं जो आसानी से एक्स्टेंसिबल होता है। और आप अभिव्यक्ति पेड़ों के शीर्ष पर आसानी से एक बहुत गतिशील जीयूआई डाल सकते हैं जो आपकी आवश्यकता के उस पहलू को पूरा करता है।

उम्मीद है कि यह ऐसा नहीं लगता है कि मैं अपने हथौड़े के साथ एक नाखून की तरह दिखता हूं क्योंकि यह मामला नहीं है ... यह सिर्फ मेरे अनुभव में है, यह एक से अधिक बार काम में आया है :-)

+0

मुझे यकीन नहीं है कि मैं अभिव्यक्ति पेड़ों की प्रयोज्यता को समझता हूं। क्या आप उन्हें नियम भाषा दुभाषिया के पहलू के रूप में सुझाव दे रहे हैं, या आप प्रत्येक नियम के विकल्पों का प्रतिनिधित्व करने के लिए उनका उपयोग करते हैं? मैं थोड़ा उलझन में हूँ। – rcreswick

0

सबसे पहले, सामान्यतः यह सलाह दी जाती है कि अंतिम उपयोगकर्ता नियमों को परिभाषित न करें। ऐसा इसलिए है क्योंकि उनके पास विकास पृष्ठभूमि नहीं है और केवल "कोड" लिख सकता है जो अनंत लूप में जाता है या अन्य अजीब चीजें करता है।

तो या तो सिस्टम को इस तरह के व्यवहार (इस प्रकार, इसे और अधिक जटिल बनाने) के खिलाफ सुरक्षा करना है, ऐसी संभावना को स्वीकार करें, या अंत उपयोगकर्ताओं को ऐसा करने की अनुमति दें।

यदि आप .NET के साथ काम कर रहे हैं तो बू बू कंपाइलर (यानी Rhino.DSL के साथ आप एक डीएसएल के साथ सरल डीएसएल के साथ) अपने स्वयं के डीएसएल बनाने के लिए बेहद आसान है।

2

हम इस उपकरण की एक आंतरिक प्रदर्शन किया था यह विक्रेता है द्वारा: http://www.rulearts.com/rulexpress.php

एक कंपनी के रूप में, हम नियम इंजन (उदा Cleverpath Aion), लेकिन ज्यादातर डेवलपर उन्मुख उपकरणों के साथ अनुभव का एक बहुत कुछ है। यह टूल (rulexpress) बहुत व्यवसाय-लोग उन्मुख है। यह एक नियम इंजन नहीं है। लेकिन यह एक्सएमएल में सभी डेटा आउटपुट कर सकता है (इसलिए मूल रूप से आपको कोई भी प्रारूप पसंद है), और यह ऐसा कुछ है जिसे हम वास्तविक नियम इंजन के लिए इनपुट के रूप में मानेंगे, उदाहरण के लिए विंडोज वर्कफ़्लो फाउंडेशन (बड़े/बेहतर नियम इंजनों में से एक नहीं, लेकिन फिर भी)।

उपकरण स्वयं में बहुत अच्छा लग रहा था, कुछ सामान जो मैंने किसी भी डेवलपर-उन्मुख टूल में कभी नहीं देखा था।

डब्ल्यूएफ के आसपास बनाए गए नियम प्रबंधन के लिए कुछ टूल भी हैं, यदि यह आपकी पसंद का नियम इंजन है, तो इनरूल देखें।


संपादित मूल प्रश्न के बाद स्पष्ट किया गया: हालांकि मैं एक लंबे समय पहले इस में dabbled है (JavaCC में एक छोटे से भाषा लिखने), मैं अब इस एक बुरा समय निवेश पर विचार करेंगे। ऊपर मेरी टिप्पणी एक ही भावना में है: एक साधारण नियम इंजन, एक साधारण (वाणिज्यिक) यूआई लें जो व्यापार उपयोगकर्ताओं को बनाए रखने के लिए आसान बनाता है, और केवल दोनों को एक साथ जोड़ने में समय निवेश करता है।

संबंधित मुद्दे

 संबंधित मुद्दे