2013-12-16 62 views
0

我有一個方法,我想中止它的執行,如果有一些condifion發生。MVC如何中止方法執行?

最簡單的情況是

public bool myFlag = true; 

public bool MyMethod(/*args*/) 
{ 
    if(myFlag) 
    { 
     //do some stuff #1 
    } 
    else 
     return false; 

    if(myFlag) 
    { 
     //do some stuff #2 
    } 
    else 
     return false; 

    //etc 
} 

但問題是,我mythod內部有這麼多的代碼,我不希望在每一行檢查myFlag因爲代碼將被搞砸硬了解。我想知道如何簡化這種情況,但我沒有任何想法。

我在考慮把這種方式來單獨Thread,但用戶界面必須等待,直到操作完成,也即梅託德具有I/O操作中(如果它的事項)

+0

向我確認,檢查我是否理解。 'MyMethod'將在一個線程中執行,'myFlag'可以在另一個線程中設置? –

+0

不,我現在不使用Thread類,它只是一個猜測 – Tony

+0

但是如果你的變量myFlag沒有變化(可以改變上下文),爲什麼你需要多次檢查它? –

回答

0

除非我的誤解,這是不完全相同的是你的榜樣,但有一個條件檢查:

public bool MyMethod(/*args*/) 
{ 
    if(!myFlag) 
      return false; 

    //Rest of glorious code! 
} 
0

,而不是設置一個標誌,簡單地從方法返回當你檢測到中止條件。如果這仍然留下笨拙的方法,問題很可能是代碼太多!識別工作單元並將其重構爲單獨的子方法。

1

這就是我處理這種需求的方式:基本上,我將這個方法分開並創建許多子方法,然後使用異常來調節流(我發現這是功能和可讀性之間的最佳折中方案)。

它看起來像這樣:

private void performFirstStep(/*args*/) 
{ 
    //do stuff, throw if something goes wrong 
} 
private void performSecondStep(/*args*/) 
{ 
    //do stuff, throw if something goes wrong 
} 

public bool MyMethod(/*args*/) 
{ 
    try 
    { 
     // each method is supposed to represent a single Unit Of Work 
     performFirstStep(/*args*/); 
     performSecondStep(/*args*/); 
     performThirdStep(/*args*/); 
     return true; 
    } 
    catch(Exception ex) // I usually craft a custom exc. type to use here 
    { 
     // overly simplified catch block: you'll probably want 
     // to *not* swallow the exceptions coming from the inside methods... 
     // lots of possibilities here to easen debug 
     return false; 
    } 
} 

你也可以將方法bool和使用他們的返回值,但你需要的try-catch無論如何,所以你不妨利用它。