이 말은, 예를 들어, 나는 PostsService
을 가지고 게시물을 만듭니다 :서비스 계층에서 어떤 유형의 결과를 반환해야합니까?
public class PostsService : IPostsService
{
public bool Create(Post post)
{
if(!this.Validate(post))
{
return false;
}
try
{
this.repository.Add(post);
this.repository.Save();
}
catch(Exception e)
{
return false;
}
}
}
이 가진 문제는 예외가 저장소 작업을하는 동안 발생하는 경우, 그것을 삼킨 점이다. Create()
이 false
이고 소비자가 알고있는 것은 Post
이 추가되지 않았지만 은을 알지 못한다는 것입니다.
public class ServiceResult
{
public bool Success { get; private set; }
public Exception Exception { get; private set; }
}
이 좋은 디자인 될 것이다 :
대신에, 나는 ServiceResult
클래스를 갖는 생각했다? 아니면 이러한 오류를 소비자에게보고해야합니까? "게시물을 추가하는 동안 오류가 발생했습니다."라고 말하는 것으로 충분합니다. 그런 다음 서비스 내부에 예외를 기록 하시겠습니까?
기타 제안 사항에 감사드립니다.
답변 해 주셔서 감사합니다. 실제 예외에 비해 오류 메시지 * 목록을 반환하는 것이 좋다고 생각하십니까? – TheCloudlessSky
@ TheCloudlessSky. 내 경험으로는 큰 차이는 아니지만, 일반적으로 소비자를 Actionscript에 작성하고, 서비스 부분을 PHP 또는 .NET으로 작성하기 때문에 가능할 수 있습니다. 그래서 소비자 관점에서 볼 때, 예외는 단지 메시지 일 뿐이며, try/catch로 잡을 수있는 실제 예외는 아닙니다. 어쨌든, 중요한 측면은 이러한 메시지를 귀하의 앱에 맞게 만드는 것이라고 생각합니다. 이것은 좀 더 많은 작업 일 수 있지만, API의 일부로 만들고 있으므로 문서화되어 있으며 어떤 유형의 오류가 예상되는지에 대해 양측이 동의합니다. –
(계속) 예를 들어, 예전에는 오류가 발생했을 때마다 모든 예외를 반환 한 일부 Java 서비스와 함께 작업했습니다. 예를 들어 오라클 드라이버가 예외 제한을 위반했음을 나타내는 예외 트렁크 (예 : 내 대답은, 실제로, 이것은 게으름에서였다, 나는 추측한다). 나는 이것을 시도하지 않기로 결정했다. 이것은 소비자를 백엔드의 일부 DB 드라이버에게 묶어주기 때문이다. 이것은 비합리적이다. 반면, 위반 된 비즈니스 특정 규칙을 나타내는 메시지를 갖는 것은 최종 사용자에게 알리는 데 매우 유용합니다. –