2009-04-29 6 views
2

가정하자 나는 한 개체에 다음과 같은 방법 나는 가장 좋은 방법은에 메시지를 지정하는 것입니다 DidSomething 거짓을 반환하는 이유에 대한 자세한 내용을 제공하고 싶었가장 좋은 방법은 설명하기

public class foo 
{ 
    public bool DoSomethingAwesome() 
    { 
     bool bar = DidSomething() //suppose this sends an email; 
     return bar; 
    } 

} 

a foo에 속성을 지정하거나 Out 매개 변수를 DoSomethingAwesome에 할당 하시겠습니까?

+0

저는 약간의 오해의 소지가 있다고 생각합니다. 이것은 (예외 투표 던지기) 오류 조건에서해야 할 일에 대한 것입니다. – danswain

답변

5

이것은 사용하는 프레임 워크 (즉, 규칙)에 크게 달려 있다고 생각합니다.

  • Win32의 경우 SetLastError, GetLastError가 있습니다.
  • .NET의 경우 일반적으로 예외가 발생하지만 상황에 맞게 이 변경 될 수 있습니다.

아마 out param은 괜찮습니다.

예외 경로를 사용하기로 결정한 경우 MSDN에 "Design Guidelines for Exceptions"이라는 항목이 있습니다. 그리고 책 "Framework Design Guidlines"- 제 7 장에 대한 훌륭한 토론이 있습니다.

+2

.NET을 제외한 모든 예외를 throw하는 것이 올바른 방법입니다. – Noldorin

+0

나는 특히이 경우에 수행하는 작업이 성능에 중요한 루틴에 있지 않기 때문에 동의하는 경향이 있습니다. 예외는 언제나 올바른 해결책은 아니지만 예외를 던지거나 잡는 속도가 느려지므로 일반적으로 고성능 코드에서만 그렇습니다. –

2

당신이하고있는 일에 따라 달라 지지만 주어진 상황에서 이메일을 보내면 잘못된 일에 따라 다른 예외가 발생할 것입니다. 이메일을 보내는 것은 거의 매번 작동해야하는데, 나쁜 일이 생길 때 발신자가 기본적으로이를 무시하는 대신 처리하도록하고 싶습니다.

실패 확률이 높은 경우, 실패를 무시할 수도 있고 false이 반드시 실패를 의미하는 것은 아니며, 각 유형의 실패와 성공에 대한 값을 가진 enum을 생성합니다. bool 대신 그 값을 반환하십시오. 여기에 내 대답에

0

거짓 조건이 "예외"가 아닌 경우 (은 희귀하지만 균등하게 발생하지 않음)) 예외를 사용하면 안됩니다. 이 경우 out 매개 변수를 사용하면 훨씬 좋습니다.