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