2009-08-26 10 views
8

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

उदाहरण:

command1.CommandSucceeded += delegate { command2.Execute(); }; 
command1.Execute(); 

यह काम करता है, लेकिन यह अनाड़ी और unintuitive महसूस करता है। मैं सफलतापूर्वक या असफलता का संकेत देने वाले निष्पादन() पर एक बूलियन पास कर सकता हूं, लेकिन यह उसी पथ के साथ है। मैं विफलता पर अपवाद फेंक सकता हूं, जिसके परिणामस्वरूप क्लीनर कोड हो सकता है, लेकिन अधिक हो सकता है।

कोई सुझाव?

उत्तर

7

मुझे "चेन" कमांड स्थापित करके इसके आसपास मिल गया। मैंने एक कमांड ऑब्जेक्ट बनाया है जिसमें अन्य कमांड हैं, फिर जब उन्हें कॉल किया जाता है तो उनमें से प्रत्येक को आग लगती है। आपके मामले में, आप कमांड को प्रतिनिधि को कॉल कर सकते हैं और अनुक्रम में अगली कमांड को केवल तब सफल कर सकते हैं जब यह सफल हो।

ऐसा करने का एक तरीका, मुझे लगता है।

+3

हाँ जिम्मेदारी पैटर्न की श्रृंखला यहाँ उपयोगी है। – pjp

+1

नहीं पता था कि इसे कहा जाता था। जानकारी के लिए धन्यवाद। –

+0

उत्तरदायित्व पैटर्न की श्रृंखला एक अच्छा फिट प्रतीत होता है। जवाब के लिए धन्यवाद। – Josh

1

एक बूलियन लौटने या किसी स्थिति का प्रतिनिधित्व करने वाली वस्तु खराब नहीं है। यह बेकार महसूस हो सकता है, लेकिन यह सरल और स्पष्ट है। मैं जोड़ने कमान एक सूची में वस्तुओं

पहले:

एक कार्यान्वयन का उपयोग मैं कुछ इस तरह है।

List<ICommand> commands = new List<ICommand>; 
commands.Add(command1); 
commands.Add(command2); 

फिर कमान वस्तुओं की सूची इस तरह मार डाला जाता है:

foreach (ICommand command in commands) 
{ 
    bool success = command.Execute(); 
    if (!success) break; 
} 
संबंधित मुद्दे