Exception Raising v DBC
I was reading an article on DBC and realized that I disagree with some of the points.
In particular I think its better to specify the contract in .NET using the
///
/// Should be > 0
///
public User GetUserWithIdOf(int id, UserRepository userRepository)
{
#region Preconditions
ArgumentValidation.ThrowIfNegative(id, "id");
#endregion
This sort of approch is documented on code project.
One other thing that worries me is when people talk about using exceptions for "exceptional" circumstances. I personally buy more into the approach Microsofts "Framework Design Guidelines" book pushes for: "If a member cannot successfully do what it is designed to do, it should be considered and execution failure and an exception should be thrown".
Therefore if a repository has GetById and it can't get the object what do we do? Do we return null and leave it to the caller to decide what to do, or do we be more explicit and rename our method TryToGetById if it is not going to raise exceptions. I choose the latter and in fact NHibernate uses this sort of approach where ISession.Get does not raise an exception if it can't find the object but ISession.Load does.
No comments:
Post a Comment