Ben büyük bir yazma hayranları, sözleşmeler ya da kullandığım dilde mevcut her türlü çekler hayranıyım. Beni biraz rahatsız eden bir şey, tekrarlanan kontrollerle uğraşmak için ortak uygulamanın ne olduğundan emin değilim.
Örnek durum: İlk önce aşağıdaki işlevi yazıyorum
void DoSomething( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
//code using obj
}
birkaç saat sonra birincisini çağıran başka bir işlev yazıyorum. Her şey hala bellekte taze olduğundan, DoSomething
zaten boş bir nesneyi kontrol edeceğini bildiğim için sözleşmeyi çoğaltmamaya karar verdim :
void DoSomethingElse( object obj )
{
//no Requires here: DoSomething will do that already
DoSomething( obj );
//code using obj
}
Bariz sorun: DoSomethingElse
şimdi DoSomething
obj 'in null olmadığını doğrulamaya bağlı . Bu nedenle, DoSomething
artık kontrol etmemeye karar vermeli veya başka bir işlev kullanmaya karar verirsem obj artık kontrol edilmeyebilir. Sonuçta bu uygulamayı yazmama neden oluyor:
void DoSomethingElse( object obj )
{
Contract.Requires<ArgumentNullException>( obj != null );
DoSomething( obj );
//code using obj
}
Her zaman güvenli, endişelenmeyin, ancak durum büyüdükçe aynı nesne birkaç kez kontrol edilebilir ve bu bir çoğaltma biçimidir ve hepimiz bunun çok iyi olmadığını biliyoruz.
Bu gibi durumlar için en yaygın uygulama nedir?
ArgumentBullException
? Bu yeni bir tane :)