2011-05-04 7 views
6

को मैं एक सम्मानित सहकर्मी के साथ एक दिलचस्प चर्चा haiving कर रहा हूँ और कुछ अतिरिक्त इनपुट चाहते हैं ...मूल निवासी जावा समाधान निर्णय टेबल

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

मेरा सहयोगी मिश्रण में तीसरे पक्ष के एपीआई को पेश नहीं करना चाहता है और माइक्रोसॉफ्ट फ़ाइल प्रारूप से जुड़ा हुआ आरक्षण है।

मुझे उसका बिंदु दिखाई देता है, लेकिन जावा के माध्यम से निर्णय तालिका को लागू करने का एकमात्र तरीका मैं बदसूरत की श्रृंखला को कोड करना चाहता हूं, अगर छोटे टेबल के लिए ठीक है या मामला बयान है, लेकिन जब मैं जाता हूं तो अप्रबंधनीय हो जाता है बड़ी टेबल

क्या किसी के पास तर्क के दोनों तरफ कोई टिप्पणी है। अगर किसी के पास ऐसे पैटर्न के बारे में कोई विचार है जो देशी जावा में मेरी समस्या का समाधान कर सकता है तो मुझे इसे सुनना होगा।

आपके समय के लिए बहुत धन्यवाद।

उत्तर

8

हममम, एक पूरी तरह से अनुभवहीन प्रयास:

public interface Condition<Type T> { 
    public boolean process(T object); 
} 

ArrayList row = new ArrayList<Condition>(10); 
row.add(new Condition<YourObject>() { 
       public boolean process(YourObject obj) { 
         if (obj.property > 0) return true; 
         else return false; 
       }); 
row.add(new Condition<YourObject>() { 
       public boolean process(YourObject obj) { 
         if (obj.property2 == 100) return true; 
         else return false; 
       }); 

तो फिर तुम पुनरावृति जाएगा:

for (Condition<YourObject> cond : row) { 
    if (! cond.process(yourobj)) break; 
} 

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

या यदि आप एक उदाहरण पोस्ट करते हैं तो कोई ऐसा संभव है जो आप चाहते हैं कि कुछ सरल स्कैला दिनचर्या के साथ आ सकें।

संपादित करें:

तो मैं एक छोटे से अनुसंधान और सोच किया था, और BeanShell के लिए तुम इतनी तरह कुछ इस्तेमाल कर सकते हैं:

import bsh.Interpreter; 

Interpreter i = new Interpreter(); // Construct an interpreter 
YourObject yourObject = new YourObject(); 
i.set("myObject", yourObject); 

// Source an external script file 
i.source("somefile.bsh"); 

और somefile.bsh इस प्रकार दिखाई देंगे:

var rules = new Array(); 
rules.push(function(var) { 
      if (var.getProperty() == 0) return true; 
      else return false; 
      }); 
rules.push(function(var) { 
      if (var.getProperty() < 1000) return true; 
      else return false; 
      }); 
... more rules ... 

for (var func in rules) { 
    if (!func(myObject)) break; 
} 

यह जावा स्रोत को पुन: संकलित करने से नियमों को बदलने के लिए आपको अधिक लचीलापन देगा।

आप इन समाधानों में से या तो के लिए एक और सरणी जोड़ने के लिए अपने 100 स्रोत "पंक्तियाँ"

+1

वाह, धन्यवाद क्रिस। मुझे लगता है कि मैं इसके साथ कुछ कर सकता हूं ... मैं इसे एक भंवर दे रहा हूँ। – Elwood

4

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

2) एक बार जब आप अनुभवहीन दृष्टिकोण की चोटी पर निर्माण करने के लिए शुरू करते हैं, तो आप यह है कि आप की स्थिति के विभिन्न प्रकार, विभिन्न प्रकार आदि के लिए डेटा पारसर्स

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

4) ओपनएल टैबलेट रनटाइम निर्भरता आकार हाल ही में एक्सएलएस और एक्सएलएसएक्स फ़ाइलों को पार्स करने के लिए नवीनतम अपाचे पीओआई लाइब्रेरी में स्विच करने के कारण बढ़ गया है। यह आधुनिक मानकों द्वारा अभी भी मामूली है :)

+1

बहुत धन्यवाद। मैं रिपोर्ट करने के लिए चिंतित हूं कि मैंने अपना सहयोगी जीता है। उत्पाद का एक डेमो और उपर्युक्त बिंदुओं की व्याख्या ने चाल की। मैं पहिया का पुन: आविष्कार करने का एक बड़ा प्रशंसक नहीं हूं और ओपनएल टैबलेट करता हूं जो मुझे पूरी तरह से चाहिए। – Elwood

0

एमएस एक्सेल के बारे में, यह एकमात्र ऐसा सॉफ़्टवेयर नहीं है जो Excel फ़ाइलों को बना सकता है स्टार/ओपन/लिबर ऑफिस उन्हें भी संपादित कर सकता है। और निर्णय तालिका के रूप में सरल होने के रूप में LTables की आवश्यकता है, कोई संगतता समस्या नहीं होनी चाहिए।

अन्य अच्छी तरह से पता उपकरण निर्णय तालिकाओं के लिए एक्सेल का उपयोग करते हैं (इसे जेबॉस ड्रॉल्स पढ़ें)