Urgh, not again:
public void SomeMethod(string message)
{
if (message == null)
{
throw new ArgumentNullException("message");
}
}
Guard clauses are clunky. They’re also like a series of trap doors – you break on the first guard, patch and release only to find that you break on the next.
For the clunkiness, we could Extract Method, making things clearer:
public void SomeMethod(string message)
{
IsNotNull(message, "message");
}
public void IsNotNull(string argumentValue, string argumentName)
{
if (message == null)
{
throw new ArgumentNullException(argumentName);
}
}
Eventually we might collect a few and gather them under a static class, as they're not state-dependent:
Guard.IsNotNull(message, "message");
And helpfully, there is a lightweight simplifying Guard class in the Microsoft.Practices.Unity app block: the Guard static class provides a series of methods for basic guard checks.
Guard.ArgumentNotNull(message, “message”);
The Guard class only provides a limited range of checks – although it’s partial so could be extended. The interface is pretty simple though, and provides a good starting point.
However, if you need to make a series of guard checks the interface gets cluttered with a series of Guard references and reused arguments. That can be made a bit clearer with a simple fluent interface.
No comments:
Post a Comment