İstisna İşleme, Günlük Kaydı yazmaya ne zaman başlamalı


13

İstisna İşleme Kodunuzu ne zaman yazmaya başlıyorsunuz? Günlük İfadeleri ne zaman yazmaya başlıyorsunuz?

Bu soruyu ayrıntılandırmak amacıyla, log4net günlük kaydı ile .NET platformunda olduğumuzu ancak genel bir şekilde cevap vermekten çekinmeyin.

Çözüm: Bir Windows Forms Projesi. Projeler: Kullanıcı Arayüzü, BusinessRules, DataHandlers

Yani, önce Oluştur, Oku, Güncelle, Sil gibi Veri Manipülasyonlarınızı yapan DataHandlers'ınızı yazmaya devam ediyor musunuz?

Ardından İş Kurallarınızla takip edin

Ve sonra UI'niz veya yukarıdakilerin herhangi bir başka permütasyonu.

Uygulamanızı İşlevsellik açısından test edin.

Ve sonra Kod ve Taşıma senin İstisna yazmaya başlamak nihayet sizin Günlüğü kodu?

İstisna İşleme kodunuzu yazmaya başlamak için doğru zaman ne zamandır?

Not: Temiz Kod kitabında önce try-catch-nihayet bloğunuzu yazın derler . Bu, bu soruyu sormamı istedi.

Yanıtlar:


15

İstisnalara neden olabilecek bir şeyi çağıran şeyi yazarken istisna işleme kodunuzu yazarsınız.

Örneğin, bir ağa veri gönderen bir şey yazarken, bağlantı zaman aşımlarını işleyen kodu da yazmanız gerekir. İstisna, yaptığınız şeyle doğrudan ilgilidir ve iş zihninizde tazedir.

Öte yandan, hatalı biçimlendirilmiş bir protokol veri birimiyle karşılaştığında özel durumlar oluşturan bir ayrıştırıcı yazıyorsanız , ayrıştırıcının ürettiği özel durumlar için özel durum işleme kodu yazamazsınız . (Ama elbette , ayrıştırıcının istisnaları nasıl ve ne zaman ve neden istisna yarattığını göstermek için testler yazıyorsunuz!)

Sonunda try-catch-nihayet yazmak için önerilerin ardındaki neden iki yönlüdür: nihayet fonksiyonun yarattığı / tükettiği kaynakları temizlemek için ve yakalamayı yazmak, aradığınız işlevlerin başarısız olabileceği hoş bir hatırlatmadır, ve bu arızaları (gerekirse) ele almanız gerekir.

Aslında günlük kaydı ekleme eğilimindeyim. Bunun akıllıca olup olmadığından emin değilim, ama bu benim için işe yaradı. Kabul testleri ve benzerlerini çalıştırmaya başladığımda ve sorunları vurmaya başladığımda hataları izleyebilmem için günlük kaydı ekliyorum. (Sonra oturum açmayı bırakıyorum.)


Yazma ardındaki nedenlerden dolayı 1 -nihayet try-catch ilk
Kanini

1
C ++ 'da nihayet yoktur ve çok iyi nedenlerle. RAII çok daha üstündür.
David Thornley

3

Deneyimlerime göre, en başından itibaren uygun hata işleme ve günlüğe kaydetme ile kod yazmazsanız, zaman baskısı nedeniyle yapılmaz. En başarılı geliştirme çabaları, kodlama standardı, hataların nasıl ele alınacağı, günlüğe kaydetme, temel mimari ve test araçları gibi temel uygulama yapısını belirlemek için harcanan zamanla başladı.

Aksi takdirde, sürüm 2.0 için "Hata işlemeyi iyileştirin" ve "günlük oluşturma sistemi" gibi görevleriniz olduğunu görürsünüz. Bunlar yeni özelliklerin lehine kesilecek ve "yapacak çok şeyiniz" olduğu için, düşünmediğiniz hata durumlarındaki tüm hataları düzeltiyorsunuz. (Bu sonsuza kadar sürer, çünkü kayıt sisteminiz yoktur.


1

Ne yaptığınıza bağlı

istisnalar için:

Hatalar ya da istisnaların gittikçe onları yazmak için kabarmasına izin vermek için iyi üst düzey puanların olduğu bir şey yazıyorsanız.

Performansa ihtiyaç duyan ve hata olasılığı düşük olan bir şey yazıyorsanız, hata işleyicilerini koymak için anlamlı bir yer yoktur, hata işleyicilerini testin onlara ihtiyacınız olduğunu kanıtladığı yere yazın.

Her iki durumda da, hatayla ilgili yararlı bir şeyiniz yoksa, kabarcıklı hale getirmeyi düşünün (işleyici yok)

giriş için:

Bir denetim izine ihtiyacınız varsa, önce günlüğü yazmalısınız. Hataların en üste kadar kabarcıklanmasına izin veriyorsanız, günlüğün yakalanabilmesi için orada da bazı girişler sağlamanız gerekir.

Bu durumların yanı sıra, genellikle yalnızca test / kullanımın gerekli olduğunu kanıtlayan yerlere günlük kaydı eklerim ve genellikle işimi bitirdikten sonra yapılandırmak için bir seçenek yaparım.


Detaylı cevap için teşekkürler. Günlük kaydı ile ilgili olarak, bir Denetim İzine ihtiyacım varsa neden ilk önce günlük kaydı ile başlasın? Bunları İşlevselliği ile bitirdikten sonra neden yazamıyorum? Belirli bir nedeni var mı?
Kanini

Bana göre, denetleme gerektiren işlevleri yazarken günlüğü yazmak daha kolaydır, bu nedenle, onlara ihtiyaç duymamı sağlayacak bir şey yazmadan önce temel günlüğe kaydetme işlevlerine ihtiyacım var. Denetimi gittikçe yazmazsam bir şeyleri özleyeceğimden endişe duyarım.
Bill

1

Denetim ve istisna yönetimini hizmet olarak uygulayabilirsiniz. Uygulama düzeyinde denetim günlüğü tutma işlemi, her bir ticari işlem hakkında durum verisi gerektirir. Bir uygulamayı bir iş veya işlem bağlamında izleme yeteneği, hizmetin hizmet çağrısına özgü durumunu ayrıntılı olarak gösteren iletiler göndermek için hizmet içinde bir izleme arabirimi gerektirir. Bu, her hizmetin ticari işlemdeki kritik adımlarda bir durum mesajı göndermesini gerektirir. Daha sonra, durum mesajlarını (mesajın anlambilimine (ör. İşlem kimliği) dayalı olarak) bileşik uygulama içindeki hizmetlerle ilişkilendirmek için gerçek zamanlı bir görüntüleyici oluşturabilirsiniz. Bu, SLA yönetimi, hata izleme ve sorun belirleme için iş işleminin uçtan uca bir görünümünü sağlar.

Daha sonra bir denetim hizmeti, yapılandırmasında tanımlanan ölçütlere göre iletileri tüketebilen ve kaydedebilen bir durum makinesi olarak uygulanabilir. Genel bir istisna işleyicisi, kurumsal SOA'da ortaya çıkan sorunların merkezi bir görünümünü desteklemek için istisna tabanlı izlemeyi desteklemek amacıyla denetim hizmetini de kullanabilir. Çözümdeki herhangi bir gerçekleşmemesi gereken durum, özel durum işleyicisine bir özel durum iletisi göndermek için kullanılır .


1

İhtiyacınız olduğunda yazın, ancak başlangıçtan itibaren dahil edilmek üzere tasarlayın.

Başka bir deyişle: bu günlük tutma yeteneğini işlemek için bir yol bulun ve ihtiyaç duyuldukça daha sonra gerçek somun ve cıvata işlevselliğini (hangi iletileri günlüğe kaydeder) ekleyin. İstisnalarda - atışı yazmadan önce mandalı ekleyin (ve sonunda varsa). Bu, bir şeyi unutmaktan ve kendinizi bir yinelemeden veya en kötü ihtimalle bir hata / çökmeden kurtarmanıza yardımcı olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.