이 오류 처리를 할 수있는 매우 효율적인 방법처럼 보이지만, 나는이 냄새 나는 경우 올바르게 수행하는 방법을 알고 싶어 :이 냄새 나는 오류 처리가 있습니까?
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
그리고 나서 응답에 Error
속성에 대한 확인 자바 스크립트에서 그에 따라 처리하십시오. 그것은 나를 위해 잘 작동하는 것처럼 보이지만, 이것이 냄새 나는지 확실하지 않습니다. 나는 당신이 제어 흐름을 위해 Try/Catch
블럭을 사용하도록되어 있지 않다는 것을 안다. 나는 이것이 제어 흐름으로 자격이되는지 아닌지 잘 모르겠다.
내 논리는 내가 함께 전달할 수 있다는 오류 메시지가 사용자에게 표시되는 반면 false를 반환하면 유효성 검사가 실패한 이유를 알지 못합니다. 몇 가지 유효성 검사 규칙이 있다고 가정하면 혼란 스러울 수 있으며 이중 유효성 검사가 발생할 수 있습니다. – Jason
@StackOverflowException - 어떻게 스택과 웹 서비스 클라이언트의 의미있는 오류 메시지를 반환 할 예정입니까? – Oded
나를 위해, 당신이 수행 할 수없는 가지를 만들었다는 사실은 약간 이상해 보였다. IsValid는 false를 반환 할 수 없으므로 값을 반환하는 이유는 무엇입니까? –