2010-08-13 14 views
6

WCF kitaplıklarından yansıyan bazı kodlara bakarken, özel durumlar oluşturmak için kullanılan bir desen görüyorum:İstisna fabrikalarının değeri nedir?

if(argument == null) 
{ 
    throw Error.ArgumentNull("argument"); 
} 

Boş hatalar, en basit örnek olarak, statik hata sınıfı aracılığıyla diğer özel durum türleri ile kullanılabilir.

Bu fabrika modelinin değeri nedir? Neden new operatörünü kullanmıyorsunuz ve sadece ArgumentNullException kurucusunu çağırıyorsunuz?

cevap

2

Bulduğum en büyük neden, istisnaların belirli bir geliştirme ekibi (veya ekipler) çerçevesinde nasıl ele alındığını ve tanımlandığını standartlaştırmaktır. Microsoft bile, çeşitli özel durum türlerinin Özel Durum, SystemException ve ApplicationException arasında standart olmadığını yayımlar. Özel mantık vakalarını yöneten kurallara bağlı olarak istisnanın ihtiyaçları farklı olabilir. Ayrıca, geliştiricinin gündelik endişelerinden ortak görevleri (günlüğe kaydetme gibi) kaldırmak için de yararlıdır. Tüm geliştiricinin yapmak zorunda olduğu fabrikada uygun istisnayı kullanmak ve fabrika geri kalanını hallediyor.

+0

Başvuruda bulunduğunuz standartlaştırma türünden örnekler var mı? –

+0

@Programming Hero - İç standartlara atıfta bulunuyordum. Örneğin, bizim işimizdeki geliştirme ekibimiz dahilinde, biz (potansiyel müşteriler) ilk projemize atanmasından kısa bir süre sonra bir araya geldik ve istediklerimizin temellerini atmış olduk: standartlar, günlüğe kaydetme, istisna işleme, olay işleme, n-tier adlandırma mimarlık, vb. Biz kendimiz bir fabrika yaratmadık, ancak standartların belgelerini ApplicationException yerine System.Exception ve istisnaların günlüğe kaydedilmesi, yakalanması, ele alınması veya göz ardı edilmesi için standartların kullanılması için belirttik. –

0

Fabrika, özel durumu günlüğe kaydetme gibi ek işler yapabilir mi?

+1

Yalnızca istisnanın oluşturulmasını günlüğe kaydedebilir. Bu aşamada yığın izi veya gerçekten yararlı bilgi yok. –

+0

@Programming Hero: Bir yığın izi oluşturmak için 'StackTrace' sınıfını _conceivably_ kullanabilir. Olması gerekmiyor. –

5

Temel neden, .NET özel durum iletilerinin yerelleştirilmesidir. Asıl mesaj metninin bir dize kaynağından alınması gerekir. Bu tür bir kodu tek bir yere koymak daha iyidir, böylece kimse dize kaynak ismini çalmaz.

Bir fabrika kullanımı fikri, gerçek istisna türü ayarlanabildiği için bana yararlıdan daha az olarak vurur. Bunu yapmak, her ne sebeple olursa olsun, bu istisnayı yakalamaya çalışan çok fazla müşteri kodunu bozabilir. Belirli bir istisna atar kodunuzu gönderdikten sonra, oldukça fazla takıldınız. Akıllıca seçim yapın :)