2

我有一個問題,在提交表單之前和提交表單之前,我必須爲表單定義某些標準,這意味着表單在提交時會通過標準和如果符合標準,它會執行一個操作。如何在編程中處理冗長的條件決定

現在,它引出了很多if/else條件,我想知道如何避免這種情況。我也關心性能問題。有沒有適合這個的設計模式?我應該如何存儲數據?在這種情況下,什麼數據結構可能有用?

+0

我不會擔心太多的性能,我會讓代碼工作,易於理解和擴展,然後檢查它是否足夠快。 –

回答

1

根據您的描述,您可以收集驗證者或chain of responsibility進行驗證。

在任何情況下,每個驗證程序類都有責任執行驗證的一小部分,並且只有在所有驗證都成功後才執行最終操作。

如果您驗證的形式爲

if (someFlag) 
{ 
    if (form.SomeProperty!= validValue) return false 
} 
else 
{ 
    if (form.SomeOtherProperty!= validValue) return false 
} 
if (someOtherFlag) 
{ 
    if (form.SomeThirdProperty!= validValue) return false 
} 
else 
{ 
    if (form.SomeForthProperty!= validValue) return false 
} 

所有重複一個接一個,然後我將有利於驗證的簡單集合,只是環輪他們都逐項檢查,一旦一個失敗返回false如果所有人都成功了,請採取行動。

,如果他們更深入地嵌套與某些檢查,在某些情況下,只能正在做的,有點像這樣:

if (someFlag) 
{ 
    if (form.SomeProperty!= validValue) 
    { 
     return false 
    } 
    if (someDependentFlag) 
    { 
     if (form.SomeThirdProperty!= validValue) 
     { 
      return false 
     } 
     if (someOtherDependentFlag) 
     { 
      if (form.YetAnotherField != changedValue) return false 
     } 
    } 
} 
else 
{ 
    if (form.SomeProperty2!= validValue) 
    { 
     return false 
    } 
    if (someOtherDependentFlag) 
    { 
     if (form.SomeThirdProperty!= validValue) 
     { 
      return false 
     } 
     if (someOtherDependentFlag2) 
     { 
      if (form.YetAnotherField2 != changedValue) return false 
     } 
    } 
} 

然後我會贊成鏈接方法,因爲你可以封裝每個檢查作爲一個單獨的類然後根據需要鏈接在一起,並按照你的喜好深嵌。

如果大多數檢查都很簡單,但只要您的驗證器都實現相同的接口,那麼您可以採用組合方法。

從最簡單的事情開始,如果需要,可以發展到更復雜的狀態。