Programlama işle ilgili
Buna cevap vermenin en kolay yolunun, OOP'un yıllar içindeki ilerlemesini anlamak olduğunu düşünüyorum. OOP'de yapılan her şey (ve bu konuda çoğu programlama paradigması) yapılan işe ihtiyaç duyulması üzerine modellenmiştir .
Her ne zaman bir yöntem çağrılırsa, arayan kişi “Bu işi nasıl yapacağımı bilmiyorum ama nasıl yapacağını biliyorsun, bu yüzden benim için yapıyorsun” diyor.
Bu bir zorluk sundu: çağrılan yöntem genellikle işin nasıl yapıldığını bildiğinde ne olur? Biz iletişim kurmak için bir yol gerekli "Sana yardım etmek istedim, gerçekten yaptım, ama sadece bunu yapamam."
Bunu iletmenin erken bir metodolojisi basitçe bir "çöp" değeri vermekti. Belki olumlu bir tamsayı bekliyorsunuz, bu nedenle çağrılan yöntem negatif bir sayı döndürüyor. Bunu başarmanın başka bir yolu, bir yerde bir hata değeri ayarlamaktı. Ne yazık ki, her iki yol da kazan plakasında, her şeyin şifresiz kodunu kontrol etmeme izin verdi . İşler daha karmaşık hale geldikçe, bu sistem dağılıyor.
Olağanüstü Bir Analoji
Diyelim ki bir marangoz, tesisatçı ve elektrikçiniz var. Lavabonuzu tamir etmek için tesisatçı olmak istiyorsunuz, o da ona bir göz attı. Yalnızca size, "Üzgünüm, düzeltemem. Bozuldu." Demesi yararlı olmaz. Cehennem, bakması, ayrılması ve düzeltemeyeceğini söyleyen bir mektup göndermesi daha da kötü. Şimdi istediğini yapmadığını bile bilmeden önce postanı kontrol etmelisin.
Tercih edeceğiniz şey, “Bak, tamir edemedim çünkü pompanız çalışmıyor gibi görünüyor” demesini sağlamak.
Bu bilgilerle, elektrik teknisyeninin soruna bakmasını istediğiniz sonucuna varabilirsiniz. Belki elektrikçi marangoz ile ilgili bir şeyler bulacaktır ve marangozun tamir etmesini sağlamalısınız.
Heck, bir elektrikçiye ihtiyacınız olduğunu bile bilmiyor olabilirsiniz, kime ihtiyacınız olduğunu bilmiyor olabilirsiniz . Bir ev tamir işinde sadece orta düzey bir yöneticisiniz ve odak noktalarınız sıhhi tesisat. Yani size sorun hakkında ediyoruz patronuna söyle, sonra o bunu düzeltmek için elektrikçi söyler.
İstisnaların modellendiği şey budur: ayrık bir tarzda karmaşık arıza modları. Tesisatçının elektrik teknisyeni hakkında bir bilgisi olması gerekmez - zincirdeki birisinin sorunu çözebileceğini bile bilmesi gerekmez. Sadece karşılaştığı sorunu bildirir.
Yani ... bir anti-pattern?
Ok, bu nedenle anlayış noktası istisnalar ilk adımdır. Bir sonraki anti-paternin ne olduğunu anlamaktır.
Bir anti-kalıp olarak nitelenmek için,
- problemi çöz
- kesin olumsuz sonuçları var
İlk nokta kolayca karşılanır - sistem çalıştı, değil mi?
İkinci nokta stickier. İstisnaları normal kontrol akışı olarak kullanmanın birincil nedeni kötü, çünkü amaçları değil. Bir programdaki herhangi bir işlevsellik parçasının göreceli olarak net bir amacı olmalı ve bu amaç için işbirliği yapılması gereksiz kafa karışıklığına yol açmalıdır.
Ama bu kesin bir zarar değil . İşleri yapmak için kötü bir yol ve garip, ama bir anti-patern? Hayır. Sadece ... garip.