2015-09-03 3 views
6

सबसे पहले, हाँ, मैंने खोज की है और, हाँ, मैंने एक ही अपाचे दस्तावेज़ को हर एक अंक को पढ़ा है। :-) मुझे लगता है कि थोड़ा उलझन है और मुझे लगता है कि मुझे एक जवाब पता है, इसलिए मुझे जो कुछ सोचा गया था उसका एक उदाहरण बताएं, इसका उत्तर दें जो मुझे लगता है कि जवाब है। धन्यवाद। ओह, और मुझे पता है कि कुछ एंडचॉइस() लाइनें सख्ती से जरूरी नहीं हैं और कैमल इसे समझ लेगा, लेकिन मुझे ब्लॉक को साफ-सुथरा रूप से चित्रित करना पसंद है, जब तक कि इसका उपयोग न करने का कोई कारण न हो।ऊंट अंत बनाम एंडचॉइस - सामान्य क्वेरी नहीं

.choice() 
    .when(X1) 
     // do stuff 
     .choice() 
      .when(Y) 
       //do more stuff 
      .endChoice() // close inner when block 
     .end() // close inner choice block 
    .endChoice() // close first outer when 
    .when(X2) 
     // do other stuff 
    .endChoice() // close second outer when 
.end() // close outer choice 

तो, एपीआई पर अपने मूल देखो, मैंने सोचा था कि अंत() विकल्प और विभाजन और उस endChoice (जैसे समापन बातों के लिए किया गया था) जब और अन्यथा की तरह पसंद के विकल्प को बंद करने के लिए किया गया था। ऐसा लगता है कि उत्तरार्द्ध वास्तव में अंत है() जो चॉइसडिफिनिशन देता है। जो नाम थोड़ा बेहतर बनाता है।

लेकिन, अगर मैं अंतराल() को 'करीबी आंतरिक पसंद ब्लॉक' लेबल करता हूं, तो इसका मतलब है कि मैं अगली पंक्ति, एंडचॉइस() पर जाता हूं। क्या यह आंतरिक पसंद ब्लॉक बंद करता है? यह देखते हुए कि, जब (एक्स 2) अभी भी जब (एक्स 1) ब्लॉक के भीतर है। इसलिए, मुझे लगता है कि मुझे इसे हटाने के बजाय एंडचॉइस() के साथ एंड() को प्रतिस्थापित करने की आवश्यकता है। तो परिणाम इस तरह दिखेगा:

.choice() 
    .when(X1) 
     // do stuff 
     .choice() 
      .when(Y) 
       //do more stuff 
      .endChoice() // close inner when block 
     .endChoice() // close inner choice block 
    .endChoice() // close first outer when 
    .when(X2) 
     // do other stuff 
    .endChoice() // close second outer when 
.end() // close outer choice 

तो क्या यह ऊंट में इसे संभालने का तरीका है? या क्या कोई आसान तरीका है कि मैं अभी याद कर रहा हूं? आपके समय के लिए धन्यवाद।

उत्तर

10

संक्षिप्त उत्तर: मैं तो किसी और की है इस पर अपने आप को फोन करेगा, इस सवाल का जवाब है कि आप गलत कर रहे हैं और नेस्ट विकल्प नहीं करना चाहिए।

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

केवल मेरा पड़ता था कम से कम एक अन्य स्तर: यह संभव हो गया होता है, यह बदसूरत अनावश्यक सशर्त, जैसे मतलब था। आगे विचार और चीजों को याद करते हुए मैंने जो पढ़ा था वह ज्ञान के दूसरे भाग के बारे में आया। ऊंट का पूरा बिंदु मार्गों को निर्देशित कर रहा है। प्रत्येक विकल्प जब ब्लॉक को केवल एक मार्ग पर प्रक्रिया को इंगित करना चाहिए। यह सोच, प्रसंस्करण, या कुछ भी नहीं होना चाहिए। अंत में, हमारा समूह मार्ग निर्माता से अधिकांश बीन को हटाने के लिए रीफैक्टरिंग करने जा रहा है।

from(uri) 
    .bean(class, method) // do any processing 
    .choice() 
     .when(header("result").isEqualTo("A") 
      .to(routeA) 
     .endChoice() 
     .when(header("result").isEqualTo("B") 
      .to(routeB) 
     .endChoice() 
     .when(header("result").isEqualTo("C") 
      .to(route) 
     .endChoice() 
     .end() 

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

+2

अच्छी सलाह, मैं घोंसला विकल्पों को भी नहीं करने का प्रयास करता हूं। आपके सहयोगी या आपका भविष्य स्वयं आपको धन्यवाद देगा;)। – helpermethod

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