Bu yazıdaki nekro için özür dilerim, ama dokunulmamış gibi görünen bazı şeyleri tartmak zorunda hissediyorum.
Her şeyden önce - birim testi sırasında kendimizi bir sınıfa özel üyelere erişmeye ihtiyaç duyduğumuzda, genellikle stratejik veya taktik yaklaşımımızda göz ardı ettiğimiz ve yanlışlıkla tek sorumluluk prensibini zorlayarak ihlal ettiğimiz büyük, şişman bir kırmızı bayraktır. ait olmadığı davranış. Bir inşaat prosedürünün yalıtılmış bir altyordamından başka bir şey olmayan yöntemlere erişim ihtiyacını hissetmek, bunun en yaygın olaylarından biridir; ancak, patronunuz sizi çalışmaya hazır olarak görünmenizi bekliyor ve aynı zamanda sizi bu duruma sokmak için hangi sabah rutini yaşadığınızı bilmeye ihtiyaç duyuyor ...
Bu durumun en yaygın diğer örneği, kendinizi meşhur "tanrı sınıfını" denemeye çalışırken bulmanızdır. Bu, kendi başına özel bir tür problemdir, ancak bir prosedürün samimi ayrıntılarını bilmeye ihtiyaç duymakla aynı temel sorundan muzdariptir - ancak bu konudan çıkıyor.
Bu özel örnekte, Bar nesnesini FooBar sınıfının yapıcısına tam olarak başlatma sorumluluğunu etkin bir şekilde belirledik. Nesne yönelimli programlamada, temel kiracılardan biri, kurucunun "kutsal" olması ve kendi iç durumunu geçersiz kılacak ve aşağı akışta başka bir yerde başarısız olmaya başlayabilecek geçersiz verilere karşı korunması gerektiğidir. boru hattı.)
Burada FooBar nesnesinin, FooBar'ın oluşturulduğu sırada hazır olmayan bir Çubuğu kabul etmesine izin vererek başarısız olduk ve FooBar nesnesinin konuları kendi haline getirmesi gibi bir tür "hackleme" ile telafi ettiler. eller.
Bu, nesne yönelimli başka bir programa (Bar durumunda) uymamanın bir sonucudur, bu da bir nesnenin durumunun tamamen başlatılmalı ve oluşturulduktan hemen sonra 'genel üyelerine gelen çağrıları işlemeye hazır olmalıdır. Şimdi, bu, tüm durumlarda kurucu çağrıldıktan hemen sonra anlamına gelmez. Birçok karmaşık inşaat senaryosuna sahip bir nesneniz olduğunda, ayarlayıcıları isteğe bağlı üyelerine bir tasarım tasarım modeline (Fabrika, Oluşturucu vb.) Göre uygulanan bir nesneye maruz bırakmak daha iyidir. ikinci durumlar,
Örneğinizde, Çubuğun "durum" özelliği, bir FooBar'ın kabul edebileceği geçerli bir durumda görünmüyor - bu nedenle FooBar bu sorunu düzeltmek için bir şeyler yapıyor.
Gördüğüm ikinci sorun, test odaklı geliştirme uygulamak yerine kodunuzu test etmeye çalıştığınızdır. Bu, kesinlikle bu noktada benim görüşüm; ancak, bu tür testler gerçekten bir anti-kalıptır. Yapmanız gereken şey, ihtiyacınız olan testleri yazmak ve daha sonra testleri programlamak yerine, kodunuzun gerçekte sonra test edilebilir olmasını önleyen temel tasarım sorunlarınız olduğunu fark etme tuzağına düşmektir. Her iki durumda da sorunla karşılaşırsanız, gerçekten bir SOLID uygulaması elde etmiş olsanız bile aynı sayıda test ve kod satırıyla karşılaşmalısınız. Öyleyse, neden geliştirme çabalarınızın başlangıcında konuyu ele alabildiğinizde neden test edilebilir koda dönüştürebilirsiniz?
Bunu yapmış olsaydınız, tasarımınızı test etmek için oldukça icky kod yazmak zorunda kalacağınızı çok daha önce fark etmiş olacaktınız ve davranışı uygulamalara katarak yaklaşımınızı yeniden hizalama fırsatını daha önce bulabildiniz. kolayca test edilebilir.