내 개인적인 의견 : 두 가지 접근 방식은 그 용도가있다. 상황이 왜 발생했는지, 예방할 수 있는지, 클라이언트가이를 방지하기 위해 할 수있는 일에 달려 있습니다.
서버 :
method SetBalance(int balance)
{
// do something only if balance >= 0
}
클라이언트 :
myServer.SetBalance(balance);
사례 1 : 상황은 (서버 또는 클라이언트에) 곳에서만 버그로 인해 발생 . 예외를 던집니다. 책임자가 코드를 수정하도록하십시오.
사례 2 : 일부 외부 종속성으로부터 잘못된 입력이 수신되었습니다. 클라이언트는 전제 조건을 쉽게 확인할 수 있습니다. 예외를 던집니다. 클라이언트가 그 코드에 만족하지 않으면 클라이언트가 코드를 수정하도록합니다.
if(balance>0)
myServer.SetBalance(balance);
else
//take appropriate action.
사례 3 : 나쁜 입력 일부 외부 종속성에서 수신된다. 클라이언트는 전제 조건을 쉽게 확인할 수 없었습니다. 예 : 클라이언트가 서버의 작업 인 문자열을 구문 분석해야합니다. 여기서, 서버가 성공을 반환해야 함을 의미한다 : 아래로 내 대답을 작성 후
bool succeeded = myServer.SetBalance(balance);
if(!succeeded)
//take appropriate action.
을, 나는이 모든 귀결주의 : 클라이언트는 메소드 SetBalance를 호출-캐치를 시도 사용할 필요가 없습니다 . http://blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx
편집 : 여기
는 관련 주제에 대한 좋은 읽기입니다 (어느 쪽이 버그 때문에 반환 값을 예외를 catch하거나 전제 조건을 직접 확인하거나 검사하지 않습니다입니다) Jojo는 좋은 지적입니다. 메서드 이름을
TrySetBalance()으로 바꾸면 실패 할 가능성이 있습니다.
균형을 조정할 수없는 이유는 무엇입니까? – Eimantas
반환이 더 좋았더라도, 나는 bool보다는 더 기술적 인 것을 사용할 것입니다. – Giedrius
예를 들어, Eimantas. –