これは、エラー処理を行うにはかなり効率的な方法のように思えるが、私はこれが臭いの場合はそれを正しく行う方法を知りたい:このエラーが処理されますか?
Class Widget
...
Public Function IsValid() As Boolean
If (some condition isnt met) Then
Throw New ApplicationException("Error message")
ElseIf (some other condition isnt met) Then
Throw New ApplicationException("Another error message")
End If
Return True
End Function
...
End Class
... (somewhere else)...
Public Function DoAwesomeStuff(id As Integer) As String
Dim w As Widget() = Widget.GetWidget(id)
If w.IsValid Then
Do Awesome Things
End If
Return a string of some sort
End Sub
... (somewhere elser)...
<WebMethod(EnableSession:=True)>
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)>
Public Function Add(ByVal id As Integer) As String
Try
//.ToJson is an Extension Method that serializes an obj to JSON
Return New With {.Message = DoAwesomeStuff(id)}.ToJson
Catch ex As Exception
Return New With {.Message = "Error: " & ex.Message, .Error = True}.ToJson
End Try
End Function
そしてJavaScriptで私が受けてError
プロパティをチェックしますそれに応じて処理します。それは私のためにうまく動作するようだが、これが臭いかどうかわからない。私はあなたがコントロールフローのためにTry/Catch
ブロックを使用するはずではないことを知っています、私はこれがコントロールフローとして認めるかどうか分かりません。
私のロジックがあり、私が一緒に渡すことができますエラーメッセージが表示されますが、falseを返すと、検証が失敗した理由がわかりません。私はいくつかのバリデーションルールがあると仮定すると、これは混乱したり、二重検証を引き起こしたりする可能性があります。 – Jason
@StackOverflowException - それ以外の場合は、スタックとWebサービスクライアントの間で意味のあるエラーメッセージを返しますか? – Oded
私の場合、実行できないブランチを作成したという事実はちょっと変わったようです。 IsValidはfalseを返すことはできません。なぜ値を返すのですか? –