What approaches do people take (if any) in managing guard clause explosion in your classes? For example:
public void SomeMethod<T>(string var1, IEnumerable<T> items, int count)
{
if (string.IsNullOrEmpty(var1))
{
throw new ArgumentNullException("var1");
}
if (items == null)
{
throw new ArgumentNullException("items");
}
if (count < 1)
{
throw new ArgumentOutOfRangeException("count");
}
... etc ....
}
In the project that I am currently working on there are many classes that have a similar set of guard clauses on the public methods.
I am aware of the .NET 4.0 Code Contracts however this is not an option for our team at the moment.
A lot of projects that I've seen use a static Guard
class.
public static class Guard {
public static void ArgumentIsNotNull(object value, string argument) {
if (value == null)
throw new ArgumentNullException(argument);
}
}
It makes the code a lot cleaner, in my opinion.
Guard.ArgumentIsNotNull(arg1, "arg1");
If you don't want to go down the Code Contracts route, one way to simplify it is to remove the braces:
public void SomeMethod<T>(string var1, IEnumerable<T> items, int count)
{
if (string.IsNullOrEmpty(var1))
throw new ArgumentNullException("var1");
if (items == null)
throw new ArgumentNullException("items");
if (count < 1)
throw new ArgumentOutOfRangeException("count");
... etc ....
}
Other than that, there are some ways that you can simulate Code Contracts, if your objection is that .Net 4.0 is not prime time yet:
http://geekswithblogs.net/Podwysocki/archive/2008/01/22/118770.aspx
You might consider refactoring to Introduce a Null Object.
Meanwhile there's an excellent article about this here: http://haacked.com/archive/2013/01/05/mitigate-the-billion-dollar-mistake-with-aspects.aspx/
I would consider to use NullGuard.Fody as I'm excited about Fodys abilities to reduce boilerplate code
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With