Statik yöntemlerle doldurulmuş faydalı sınıfları severdim. Aksi halde fazlalık ve bakım cehennemine neden olacak yardımcı yöntemlerin büyük bir konsolidasyonunu yaptılar. Kullanımı çok kolay, örnekleme yok, elden çıkarma yok, sadece unutun. Sanırım bu hizmet odaklı bir mimari yaratmaya yönelik ilk isteksiz girişimim - sadece işlerini yapan ve başka hiçbir şey yapmayan vatansız hizmetler. Ancak bir sistem büyüdükçe, ejderhalar da geliyor.
Çok Biçimlilik
Demek ki mutlu bir şekilde vızıldayan UtilityClass.SomeMethod yöntemine sahibiz. Aniden işlevselliği biraz değiştirmemiz gerekiyor. İşlevlerin çoğu aynıdır, ancak yine de birkaç parçayı değiştirmek zorundayız. Statik bir yöntem olmasaydı, bir türev sınıf oluşturabilir ve yöntem içeriğini gerektiği gibi değiştirebiliriz. Statik bir yöntem olduğu için yapamayız. Elbette, eski yöntemden önce veya sonra işlevsellik eklememiz gerekirse, yeni bir sınıf oluşturabilir ve içindeki eski sınıfı çağırabiliriz - ama bu sadece iğrenç.
Arayüz woes
Statik yöntemler, mantık nedenleriyle arayüzler üzerinden tanımlanamaz. Statik yöntemleri geçersiz kılamayacağımız için, statik sınıflar, arayüzleri tarafından çevrilmemiz gerektiğinde işe yaramaz. Bu, statik sınıfları bir strateji modelinin parçası olarak kullanmamızı sağlar. Arabirim yerine delegeleri geçirerek bazı sorunları çözebiliriz .
Test Etme
Bu, temel olarak yukarıda belirtilen arayüz sıkıntılarıyla el ele gider. Uygulamaları değiştirme yeteneğimiz çok sınırlı olduğundan, üretim kodunu test koduyla değiştirme konusunda da sorun yaşayacağız. Yine, bunları tamamlayabiliriz, ancak gerçek nesneler yerine sarmalayıcıları kabul edebilmek için kodumuzun büyük bölümlerini değiştirmemizi gerektirecektir.
Fosters blobs
Statik yöntemler genellikle faydalı yöntemler olarak kullanıldığından ve yardımcı yöntemler genellikle farklı amaçlara sahip olacağından, tutarlı olmayan işlevsellikle doldurulmuş büyük bir sınıfla hızla sonuçlanırız - ideal olarak, her sınıfın sistem içinde tek bir amacı olmalıdır . Amaçları iyi tanımlandığı sürece derslerin beş katını tercih ederim.
Parametre sürünmesi
Başlangıç olarak, bu küçük şirin ve masum statik yöntem tek bir parametre alabilir. İşlevler büyüdükçe birkaç yeni parametre eklenir. Yakında isteğe bağlı başka parametreler eklenir, bu nedenle yöntemin aşırı yüklenmelerini oluştururuz (veya yalnızca bunları destekleyen dillerde varsayılan değerler ekleriz). Çok geçmeden, 10 parametre alan bir yöntemimiz var. Sadece ilk üçü gerçekten gereklidir, parametre 4-7 isteğe bağlıdır. Ancak parametre 6 belirtilirse, 7-9'un da doldurulması gerekir ... Bu statik yöntemin ne yaptığını yapmak için tek bir sınıf yaratmış olsaydık, bunu gerekli parametreleri alarak çözebiliriz. Kullanıcının özellikler yoluyla isteğe bağlı değerleri ayarlamasına veya aynı anda birden fazla birbirine bağlı değer belirleme yöntemlerine izin vermesine olanak tanır. Ayrıca, bir yöntem bu karmaşıklığa ulaştıysa,
Tüketicilere sebepsiz yere sınıf örneği yaratmalarını isteme
En yaygın argümanlardan biri, neden sınıfımızın tüketicilerinin bu tek yöntemi çağırmak için bir örnek oluşturduğunu, daha sonra örnek için bir faydası olmadığı talebidir? Bir sınıf örneği oluşturmak çoğu dilde çok ucuz bir işlemdir, bu nedenle hız bir sorun değildir. Tüketiciye ekstra bir kod satırı eklemek, gelecekte çok daha sürdürülebilir bir çözümün temelini atmak için düşük bir maliyettir. Son olarak, örnek oluşturmaktan kaçınmak istiyorsanız, sınıfınızın vatansız olması şartı olmasına rağmen, kolayca yeniden kullanılmasına izin veren tek bir sınıf sarmalayıcı oluşturun. Vatansız değilse, yine de uzun vadede size tüm avantajları sunarken, her şeyi idare eden statik sarma yöntemleri oluşturabilirsiniz. En sonunda,
Mutlaklar Sadece bir Sith fırsatlar
Tabii ki, statik yöntemlerin sevmeyişimden istisnaları vardır. Şişkinlik için herhangi bir risk oluşturmayan gerçek yarar sınıfları statik yöntemler için mükemmel durumlardır - System.Convert örnek olarak. Projeniz gelecekteki bakım için herhangi bir gereksinimi olmayan bir kerelik ise, genel mimari gerçekten çok önemli değil - statik veya statik olmayan, gerçekten önemli değil - geliştirme hızı önemlidir.
Standartlar, standartlar, standartlar!
Örnek yöntemlerini kullanmak, statik yöntemleri de kullanmanızı engellemez veya tersi de geçerlidir. Farklılaşmanın arkasında akıl yürütme olduğu ve standartlaştırıldığı sürece. Farklı uygulama yöntemleri ile yayılan bir iş katmanına bakmaktan daha kötü bir şey yoktur.