आपको नियम इंजन का उपयोग कब नहीं करना चाहिए? [बन्द है]


108

मेरे पास नियम इंजन का उपयोग करने के फायदों की एक बहुत ही अच्छी सूची है, साथ ही साथ उन्हें उपयोग करने के कुछ कारण भी हैं, जो मुझे चाहिए वह उन कारणों की सूची है जिनके लिए आपको नियम इंजन का उपयोग नहीं करना चाहिए

मेरे पास अब तक का सबसे अच्छा यह है:

नियम इंजन वास्तव में वर्कफ़्लो या प्रक्रिया निष्पादन को संभालने के लिए अभिप्रेत नहीं हैं और न ही वर्कफ़्लो इंजन या प्रक्रिया प्रबंधन उपकरण नियमों को करने के लिए डिज़ाइन किए गए हैं।

किसी भी अन्य बड़े कारणों से आपको उनका उपयोग क्यों नहीं करना चाहिए?


जवाबों:


34

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

मुझे लगता है कि उन्हें छोटा रखने के लिए नियमों का विभाजन करना एक बेहतर विकल्प है। पहलू कई वस्तुओं के बीच एक सामान्य नियम साझा करने का एक तरीका हो सकता है।

जहाँ भी संभव हो मैं एक सरल, अधिक डेटा संचालित दृष्टिकोण पसंद करता हूँ।


1
यह निर्धारित नहीं होगा कि क्या कोई संघर्ष हाल्टिंग समस्या का एक प्रकार है?
टीएमबी

यदि आप इसे कहते हैं तो यह मत जानिए। उस नाम का उपयोग करने से क्या परिवर्तन होता है? कुछ भी नहीं जो मैं देख सकता हूँ ...
duffymo

@duffymo "अधिक डेटा संचालित दृष्टिकोण" के लिए कोई उदाहरण?
jack.the.ripper

सुनिश्चित करें: अपने सामान को एक एकल निर्णय तालिका में रखें और अपने इच्छित उत्तर प्राप्त करने के लिए क्वेरी करें। Rete रूल्स इंजन की कोई आवश्यकता नहीं है।
duffymo

151

मैं व्यक्तिगत अनुभव से 2 उदाहरण दूंगा जहां एक रूल्स इंजन का उपयोग करना एक बुरा विचार था, शायद इससे मदद मिलेगी: -

  1. एक पिछले प्रोजेक्ट पर, मैंने देखा कि रूल्स फाइल्स (ड्रॉल्स का इस्तेमाल किया गया प्रोजेक्ट) में बहुत सारे जावा कोड होते हैं, जिसमें लूप, फंक्शन आदि शामिल होते हैं। वे अनिवार्य रूप से जावा फाइल रूल्स फाइल के रूप में मसल रहे थे। जब मैंने डिज़ाइनर से उनके तर्क के बारे में पूछा तो मुझे बताया गया कि "नियम कभी भी व्यावसायिक उपयोगकर्ताओं द्वारा बनाए रखने के लिए नहीं थे"।

पाठ : उन्हें एक कारण के लिए "व्यावसायिक नियम" कहा जाता है, जब आप एक प्रणाली को डिज़ाइन नहीं कर सकते, तो उन नियमों का उपयोग न करें जिन्हें आसानी से व्यावसायिक उपयोगकर्ताओं द्वारा बनाए रखा / समझा जा सकता है।

  1. एक और मामला; परियोजना ने नियमों का इस्तेमाल किया क्योंकि आवश्यकताओं को अक्सर परिभाषित / समझा और बदला जाता था। विकास टीम का समाधान नियमों का उपयोग बड़े पैमाने पर बार-बार आने वाले कोड से बचने के लिए किया गया था।

पाठ : आवश्यकताएँ प्रारंभिक रिलीज़ परिवर्तनों के दौरान बहुत कुछ बदल जाती हैं और नियमों का उपयोग नहीं करती हैं। नियमों का उपयोग करें जब आपका व्यवसाय अक्सर बदलता है (आवश्यकताएं नहीं)। जैसे: - एक सॉफ्टवेयर जो आपके करों को हर साल बदलता है क्योंकि कराधान कानून बदलते हैं और नियमों का उपयोग एक उत्कृष्ट विचार है। वेब ऐप का रिलीज़ 1.0 अक्सर बदल जाएगा क्योंकि उपयोगकर्ता नई आवश्यकताओं की पहचान करते हैं लेकिन समय के साथ स्थिर हो जाएंगे। कोड की तैनाती के विकल्प के रूप में नियमों का उपयोग न करें।


1
मुझे लगता है कि आपके सबक # 2 को पुनःप्रकाशित करने का एक अच्छा तरीका है "जब आप डीएसएल को लागू नहीं करते हैं तो आपको पता चलता है कि डीएसएल द्वारा निहित अमूर्त परिवर्तन की संभावना है।" डीएसएल को डिजाइन करना और लागू करना एक संसाधन-भारी प्रक्रिया है जिसका लक्ष्य आपको भविष्य में पुरस्कार प्राप्त करना है। यदि आपको हर चक्र में डीएसएल को फिर से बनाना है, तो नियम इंजन तब तक फिट नहीं होगा जब तक कि कुछ स्थिरीकरण नहीं होता है।
USER NEEDS ने

एक डीएसएल संसाधन भारी हो सकता है जिस तरह से प्रोग्रामिंग भाषाओं की व्याख्या भारी है, लेकिन वे अन्य भाषाओं की तरह ही स्थिर टाइप की जा सकती हैं और परिवर्तन पर संकलित की जा सकती हैं।
मैथ्यू Whit

19

मैं बिजनेस रूल्स इंजन का बहुत बड़ा प्रशंसक हूं, क्योंकि यह प्रोग्रामर के रूप में आपके जीवन को आसान बनाने में मदद कर सकता है। डेटा वेयरहाउस प्रोजेक्ट पर काम करते समय मैंने जो पहले अनुभव किए उनमें से एक था, पूरे पृष्ठों पर खींची गई जटिल CASE संरचनाओं वाले संग्रहीत कार्यविधियाँ खोजना। यह डिबग करने का एक बुरा सपना था, क्योंकि इस तरह की लंबी CASE संरचनाओं में लागू तर्क को समझना बहुत मुश्किल था, और यह निर्धारित करने के लिए कि आपके पास कोड के पेज 1 पर एक नियम के बीच ओवरलैपिंग है और पेज 5 से एक और। कुल मिलाकर, हमारे पास था 300 से अधिक ऐसे नियम कोड में एम्बेडेड हैं।

जब हम एक नई विकास आवश्यकता प्राप्त करते हैं, तो कुछ के लिए लेखांकन गंतव्य कहा जाता है, जिसमें 3000 से अधिक नियमों का इलाज शामिल था, मुझे पता था कि कुछ बदलना होगा। फिर मैं एक प्रोटोटाइप पर काम कर रहा हूं, जो बाद में अब एक कस्टम बिजनेस रूल इंजन बन गया है, जो सभी स्टैंडर्ड स्टैंडर्ड ऑपरेटरों को संभालने में सक्षम है। प्रारंभ में हम एक्सेल को एक संलेखन उपकरण के रूप में उपयोग कर रहे हैं और बाद में, हमने एक ASP.net एप्लिकेशन बनाया है जो व्यवसाय उपयोगकर्ताओं को कोड लिखने की आवश्यकता के बिना अपने स्वयं के व्यावसायिक नियमों को परिभाषित करने की अनुमति देगा। अब प्रणाली बहुत कम बग के साथ ठीक काम करती है, और इस लेखांकन गंतव्य की गणना के लिए 7000 से अधिक नियम हैं। मुझे नहीं लगता कि ऐसा परिदृश्य केवल हार्ड-कोडिंग द्वारा संभव हो सकता है।

फिर भी, ऐसे दृष्टिकोण की सीमाएँ हैं:

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

इस विषय पर अधिक विवरण मुझे पोस्ट की गई पोस्ट पर मिल सकते हैं: http://dwhbp.com/post/2011/10/30/Implementing-a-Business-Rule-Engine.aspx

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

चीयर्स,

निकोलाय


18

एक कविता जिसे मैंने "दोधारी तलवार" माना है:

गैर तकनीकी कर्मचारियों के हाथों में तर्क देना

मैंने इस काम को बहुत अच्छा देखा है, जब आपके पास गैर-तकनीकी पक्ष पर एक या दो बहु-विषयक जीनियस हैं, लेकिन मैंने तकनीकी विकास की कमी को ब्लोट, अधिक बग और सामान्य 4x में विकास / रखरखाव लागत के लिए भी देखा है।

इस प्रकार आपको अपने उपयोगकर्ता-आधार पर गंभीरता से विचार करने की आवश्यकता है।


13
यह एक प्रोग्रामर के रूप में आपकी गलती है और उपयोगकर्ता की गलती नहीं है अगर वह आपके सिस्टम का उपयोग नहीं कर सकता है या यदि वह लगातार इसके साथ अप्रत्याशित परिणाम प्राप्त करता है, चाहे वह एक बीआर है या नहीं। मैं कहूंगा कि आपके कोड का उपयोग करने में असमर्थता के लिए उपयोगकर्ताओं को दोषी ठहराना एक परियोजना का सबसे खराब प्रकार का प्रोग्रामिंग हो सकता है।
किज्

हालाँकि यह बहुत पुरानी पोस्ट है लेकिन मैं अभी और सहमत नहीं हो सकता। मुझे लगता है कि यदि संभव हो, तकनीकी लोग (या विक्रेता) कार्यान्वयन / ऑन-बोर्डिंग प्रक्रिया के दौरान ग्राहकों के लिए कॉन्फ़िगरेशन करने के लिए, और फिर सेवा अनुरोध के आधार पर कोई भी बड़ा बदलाव।
एरिक जिन झांग

शायद कोई व्यक्ति DSL-s के बारे में मार्टिन फॉलर द्वारा लिखे गए एक अच्छे लेख को पढ़ने में मददगार होगा: "क्या डीएसएल व्यवसायियों को प्रोग्रामर को शामिल किए बिना सॉफ़्टवेयर नियम लिखने की अनुमति देगा?" martinfowler.com/bliki/BusinessReadableDSL.html
रॉबर्ट

11

मुझे लगा कि एलेक्स पापाडिमौलिस का लेख काफी व्यावहारिक था: http://thedailywtf.com/articles/soft_coding/aspx

यह व्यापक नहीं है, लेकिन उसे कुछ अच्छे अंक मिले हैं।


2
समस्या यह है कि यह वास्तविक मानक नियमों के इंजनों के बारे में बात नहीं करता है, केवल घर के बारे में बनाया गया है, जो एक बहुत बुरा विचार है, मैं मानक नियम इंजनों के बारे में बात कर रहा हूं (ब्लेज़ सलाहकार, ILog, ड्रोल) जो RETE एल्गोरिथ्म को लागू करते हैं और एक संपूर्ण प्रदान करते हैं पारिस्थितिक तंत्र नियमों का प्रबंधन करने के लिए
ब्लैकटाइगर एक्स

भययोग्य लेख और मुझे लगता है कि आप मानक नियमों के इंजन के साथ कभी-कभी नरम हो सकते हैं, जो कभी-कभी चीजों को और अधिक जटिल बना देता है
डीन हिलर

1
30 मिनट के लिए फीस परिकलन नियम इंजन के साथ प्रति घंटे दस लाख लेन-देन के कनेक्शन के साथ एक बैंक की कल्पना करें क्योंकि डेवलपर्स के पास पदावनति है, कल्पना करें कि यह स्थिरता की अवधि थी जहां उनके पास फिक्स के लिए कई तैनाती हैं, केवल एक सेवा को रोकने पर उन्हें कितना नुकसान होगा स्टॉक ट्रेडिंग, विदेशी मुद्रा, या स्विफ्ट ट्रांसफर? यह लेख सामान्य रूप से प्रोग्रामिंग के बारे में सबसे खराब लेखों में से एक है

2
घंटाघर, 30 मिनट का डाउनटाइम कहां से आता है? फेसबुक जैसे दिग्गज लगातार बिना डाउनटाइम के नए सॉफ्टवेयर की तैनाती करते हैं। पूरे सिस्टम को नीचे ले जाने के बजाय बैचों में अपडेटिंग नोड्स का समर्थन करने के लिए एप्लिकेशन का निर्माण किया जा सकता है।
लॉरी हार्पफ

10

एक नियम इंजन का उपयोग नहीं करने पर महान लेख ... (और साथ ही जब एक का उपयोग करने के लिए) ...।

http://www.jessrules.com/guidelines.shtml

एक अन्य विकल्प यह है कि यदि आपके पास नियमों का एक रैखिक सेट है जो परिणाम प्राप्त करने के लिए किसी भी क्रम में केवल एक बार लागू होता है, तो एक ग्रूवी इंटरफ़ेस बनाना और डेवलपर्स को इन नए नियमों को लिखना और तैनात करना है। फायदा यह है कि यह दुष्ट रूप से तेज़ है क्योंकि आम तौर पर आप हाइबरनेट सत्र या jdbc सत्र के साथ-साथ किसी भी पैरामीटर को पारित करेंगे ताकि आपके पास अपने सभी एप्लिकेशन डेटा तक पहुंच हो लेकिन एक कुशल तरीके से। एक तथ्य सूची के साथ, लूपिंग / मिलान का एक बहुत कुछ हो सकता है जो वास्तव में सिस्टम को धीमा कर सकता है ..... यह एक नियम इंजन से बचने और गतिशील रूप से तैनात करने में सक्षम होने का एक और तरीका है (हाँ, हमारे groovy नियमों को एक में तैनात किया गया था) डेटाबेस और हमारे पास कोई पुनरावर्तन नहीं था .... यह या तो नियम से मिला या यह नहीं हुआ)। यह सिर्फ एक और विकल्प है ..... ओह और एक और लाभ आने वाले डेवलपर्स के लिए नियम वाक्यविन्यास नहीं सीख रहा है।

यह वास्तव में आपके संदर्भ पर निर्भर करता है। नियम इंजन में अपना स्थान होता है और ऊपर सिर्फ एक और विकल्प होता है यदि आपके पास एक परियोजना पर नियम हैं जिन्हें आप बहुत ही सरलीकृत स्थितियों के लिए गतिशील रूप से तैनात करना चाहते हैं, जिन्हें नियम इंजन की आवश्यकता नहीं है।

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


7

मेरे अनुभव में, नियम इंजन सबसे अच्छा काम करते हैं जब निम्नलिखित सत्य होते हैं:

  1. आपकी समस्या डोमेन के लिए अच्छी तरह से परिभाषित सिद्धांत है
  2. उच्च गुणवत्ता (अधिमानतः स्वचालित) डेटा आपके अधिकांश इनपुट को चलाने में मदद करने के लिए
  3. विषय वस्तु विशेषज्ञों तक पहुंच
  4. सॉफ्टवेयर डेवलपर्स अनुभव के साथ विशेषज्ञ सिस्टम बना रहे हैं

यदि इन चार लक्षणों में से कोई भी गायब है, तो आपको अभी भी आपके लिए एक नियम इंजन काम मिल सकता है, लेकिन हर बार जब मैंने इसे 1 लापता होने की कोशिश की है, तो मैं मुश्किल में चला गया हूं।


यह> _Software डेवलपर एक्सपर्ट सिस्टम बनाने के अनुभव के साथ_ <यदि आप ड्रॉल डॉक्स को ध्यान से पढ़ते हैं तो आपको पता चलेगा कि व्यावसायिक नियमों को सॉफ्टवेयर डेवलपर्स द्वारा लागू किया जाना चाहिए, जो रीट एल्गोरिथम की एक मजबूत समझ रखते हैं। स्प्रेडशीट या सीएसवी के माध्यम से व्यापार उपयोगकर्ताओं को नियमों के मापदंडों के उपयोग तक पहुंच प्रदान की जा सकती है। नियम अभी भी व्यावसायिक उपयोगकर्ताओं द्वारा वर्णित हैं, लेकिन जैसा कि आप कहते हैं, विशेषज्ञ प्रणालियों में विशेषज्ञता के साथ सॉफ्टवेयर डेवलपर्स द्वारा कार्यान्वित किया जाता है। ड्रॉल्स डॉक्स इसका वर्णन करते हैं।
मैट फ्रेडमैन

1

यह निश्चित रूप से एक अच्छी शुरुआत है। नियम इंजन के साथ दूसरी बात यह है कि कुछ चीजें अच्छी तरह से समझी जाती हैं, नियतात्मक हैं, और सीधे-आगे हैं। पेरोल रोकना उस तरह है (या उपयोग होना)। आप इसे उन नियमों के रूप में व्यक्त कर सकते हैं जिन्हें एक नियम इंजन द्वारा हल किया जाएगा, लेकिन आप समान नियमों को मानों की काफी सरल तालिका के रूप में व्यक्त कर सकते हैं।

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

नियम इंजन अच्छे होते हैं जब आपके पास जटिल ज्ञान के आधार होते हैं और खोज की आवश्यकता होती है। नियम इंजन जटिल मुद्दों को हल कर सकते हैं, और बदलती परिस्थितियों के लिए जल्दी से अनुकूलित किया जा सकता है, लेकिन आधार कार्यान्वयन पर बहुत अधिक जटिलता लागू करते हैं।

कई निर्णय एल्गोरिदम सरल टेबल-संचालित कार्यक्रम के रूप में व्यक्त करने के लिए सरल हैं, जो वास्तविक नियमों के इंजन द्वारा निहित जटिलता के बिना हैं।


0

मैं स्ट्रॉन्ग जैसे व्यावसायिक नियम इंजनों की खुले स्रोत या लाइवरुल्स जैसे वाणिज्यिक नियम इंजनों की दृढ़ता से सिफारिश करूंगा।

  • जब आपके पास बहुत सारी व्यावसायिक नीतियां होती हैं जो प्रकृति में अस्थिर होती हैं, तो कोर प्रौद्योगिकी कोड के उस हिस्से को बनाए रखना बहुत कठिन है।
  • नियम इंजन फ्रेमवर्क का एक बड़ा लचीलापन प्रदान करता है और इसे बदलने और तैनात करने में आसान है।
  • नियम इंजन का उपयोग हर जगह नहीं किया जाना चाहिए, लेकिन जब आपको बहुत सी नीतियां हैं जहां नियमित आधार पर परिवर्तन अपरिहार्य हैं, तो इसका उपयोग करने की आवश्यकता है।

0

मैं वास्तव में कुछ बिंदुओं को नहीं समझता हूं जैसे:
ए) व्यवसाय के लोगों को व्यापार को अच्छी तरह से समझने की आवश्यकता है, या;
b) व्यवसाय से जुड़े लोगों की असहमति को नियम जानने की आवश्यकता नहीं है।

मेरे लिए, केवल , BRE के लाभ को छूने वाले लोगों के रूप में BRE के लाभ को सिस्टम को व्यावसायिक परिवर्तन के अनुकूल बनाने के लिए कहा जाता है, इसलिए यह परिवर्तन के अनुकूली पर केंद्रित है।
इससे कोई फर्क नहीं पड़ता कि क्या समय x पर स्थापित नियम y की वजह से समय y पर स्थापित नियम से अलग है:
ए) व्यवसाय के लोग व्यापार को नहीं समझते हैं, या;
b) व्यवसायी लोग नियमों को नहीं समझते हैं?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.