Daha önceki bir konuya statik sınıf düşüncelerimi yazdım :
Statik yöntemlerle doldurulmuş fayda sınıflarını severdim. Fazlalık ve bakım cehennemine neden olacak şekilde uzanacak yardımcı yöntemlerin büyük bir konsolidasyonunu yaptılar. Kullanımı çok kolay, örnekleme yok, elden çıkarma yok, sadece ateş ve unut. Sanırım bu, hizmet odaklı bir mimari yaratma konusundaki ilk isteksiz girişimdi - sadece işlerini yapan ve başka bir şey yapmayan birçok vatansız hizmet. Ancak bir sistem büyüdükçe ejderhalar geliyor.
Polimorfizm
Diyelim ki birlikte mutlu bir şekilde uğultu yapan UtilityClass.SomeMethod yöntemine sahibiz. Birden işlevselliğini biraz değiştirmemiz gerekiyor. İşlevselliklerin çoğu aynıdır, ancak yine de birkaç parçayı değiştirmeliyiz. Statik bir yöntem olmasaydı, bir türev sınıfı yapabilir ve yöntem içeriğini gerektiği gibi değiştirebilirdik. 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 bunun içindeki eskisini arayabiliriz - ama bu çok iğrenç.
Arayüz sıkıntıları
Statik yöntemler, mantıksal nedenlerle arayüzler üzerinden tanımlanamaz. Ve statik yöntemleri geçersiz kılmadığımız için, statik sınıflar onları arayüzleri ile geçirmemiz gerektiğinde işe yaramaz. Bu, statik sınıfları bir strateji modelinin bir parçası olarak kullanmamızı sağlar. Arayüzler yerine delegeleri geçerek bazı sorunları çözebiliriz.
Test yapmak
Bu temelde yukarıda bahsedilen arayüzey 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ştirmek konusunda da sorun yaşayacağız. Yine, onları sarabiliriz, ancak gerçek nesneler yerine sarmalayıcıları kabul edebilmemiz için kodumuzun büyük bölümlerini değiştirmemiz gerekecek.
Fosters BLOB'ları
Statik yöntemler genellikle faydalı yöntemler olarak kullanıldığından ve faydalı yöntemler genellikle farklı amaçlara sahip olacağından, hızlı bir şekilde tutarlı olmayan işlevsellik ile doldurulmuş büyük bir sınıfla sonuçlanır - ideal olarak, her sınıfın sistem içinde tek bir amacı olması gerekir. Amaçları iyi tanımlandığı sürece sınıfları beş kat daha fazla tercih ederim.
Parametre sürünme
Başlangıçta, bu küçük sevimli ve masum statik yöntem tek bir parametre alabilir. İşlevsellik büyüdükçe, birkaç yeni parametre eklenir. Yakında isteğe bağlı olan başka parametreler de eklenir, bu nedenle yöntemin aşırı yüklenmesini sağlarız (ya da sadece onları destekleyen dillerde varsayılan değerler ekleriz). Çok geçmeden, 10 parametre alan bir yöntemimiz var. Sadece ilk üçü gerçekten gereklidir, 4-7 parametreleri isteğe bağlıdır. Fakat eğer parametre 6 belirtilmişse, 7-9 doldurulması da gerekir ... Bu statik yöntemin ne yaptığını tek bir amaç için bir sınıf oluşturmuş olsaydık, bunu istenen parametrelerde alarak çözebiliriz. yapıcı ve kullanıcının özelliklerle isteğe bağlı değerleri ayarlamasına veya aynı anda birden çok birbirine bağlı değer ayarlama yöntemleri kullanmasına izin verme. Ayrıca,
Tüketicilerin sebepsiz bir sınıf örneği oluşturmasını talep etme
En yaygın argümanlardan biri, neden sınıfımızın tüketicilerinin bu tek bir yöntemi çağırmak için bir örnek yarattığını ve sonradan örneği kullanmayacak olmasının neden talep edilmesidir? Bir sınıfın örneğini oluşturmak çoğu dilde çok ucuz bir işlemdir, bu nedenle hız sorun değildir. Tüketiciye fazladan bir kod satırı eklemek, gelecekte çok daha sürdürülebilir bir çözümün temelini atmak için düşük maliyetlidir. Ve son olarak, örnek oluşturmaktan kaçınmak istiyorsanız, sınıfınızın kolayca yeniden kullanılmasını sağlayan tek bir sarmalayıcı oluşturun - bu, sınıfınızın vatansız olması şartını ortaya çıkarsa da. Vatansız değilse de, uzun vadede size tüm avantajları sunarken, yine de her şeyi işleyen statik sarmalayıcı yöntemleri oluşturabilirsiniz. En sonunda,
Sadece bir Sith mutlak fırsatlar
Tabii ki, statik yöntemlerden hoşlanmadığım için istisnalar var. Şişirme riski oluşturmayan gerçek hizmet sınıfları, statik yöntemler için mükemmel durumlardır - bir örnek olarak System.Convert. Projeniz gelecekteki bakım için gerekliliklere sahip olmayan bir kerelikse, genel mimari gerçekten çok önemli değil - statik veya statik değil, gerçekten önemli değil - geliştirme hızı da öyle.
Standartlar, standartlar, standartlar!
Örnek yöntemlerin kullanılması, statik yöntemlerin kullanılmasını da engellemez ve bunun tersi de geçerlidir. Farklılaşmanın arkasında bir sebep olduğu ve standart olduğu sürece. Farklı uygulama yöntemleriyle yayılan bir iş katmanına bakmaktan daha kötü bir şey yoktur.