Я великий шанувальник написання тверджень, контрактів або будь-якого типу чеків, доступних мовою, якою я користуюся. Одне, що мене трохи турбує, - це те, що я не впевнений, що є загальною практикою роботи з дублюючими чеками.
Приклад ситуації: Спочатку я записую наступну функцію
void DoSomething( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
//code using obj
}
потім через кілька годин я записую ще одну функцію, яка викликає першу. Оскільки в пам’яті все ще свіже, я вирішу не дублювати контракт, оскільки знаю, що вже DoSomething
перевіряю нульовий об’єкт:
void DoSomethingElse( object obj )
{
//no Requires here: DoSomething will do that already
DoSomething( obj );
//code using obj
}
Очевидна проблема: DoSomethingElse
тепер залежить від DoSomething
перевірки того, що obj не є нульовим. Тож DoSomething
коли-небудь слід вирішувати більше не перевіряти, або якщо я вирішу використовувати іншу функцію, Obj може більше не перевірятися. Що змушує мене написати цю реалізацію:
void DoSomethingElse( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
DoSomething( obj );
//code using obj
}
Завжди безпечно, не хвилюйтесь, за винятком того, що якщо ситуація зростає одного і того ж об'єкта, можна перевіряти кілька разів, і це форма дублювання, і всі ми знаємо, що це не так добре.
Яка найпоширеніша практика для подібної ситуації?
ArgumentBullException
? Це новий :)