C # özel statik yöntemleri bir şey acıyor mu?


10

Sınıfımda birden çok kez gerçekleşen belirli bir doğrulama için özel bir doğrulama yöntemi oluşturdum (onaylanmış verileri çeşitli nedenlerle saklayamıyorum). Şimdi, ReSharper işlevin statik hale getirilebileceğini önermektedir. Statik yöntemlerle ilgili bilinen sorunlar nedeniyle bunu yapmakta biraz isteksizim. Özel bir statik yöntem olurdu . Sorum şu: Özel statik yöntemler, genel statik yöntemler gibi benzer birleştirme ve test sorunlarına neden olabilir mi? Kötü bir uygulama mı? Tahmin etmem ama burada bir tuzak olup olmadığından emin değilim.


10
Statik yöntemlerle "bilinen sorunlar" nelerdir?
Robert Harvey

3
@Ed: Doğru. Düzgün yazılmış statik yöntemler harici API'lere dokunmamalı veya yine de durum göstermemelidir. Bir sınıf içinde kapsüllenmiş iç durumun manipüle edilmesi benim için mükemmel görünüyor ve ünite testi sınıfın dış davranışını test ettiğinden, yöntemin birim teste tabi tutulması gerekmeyecek.
Robert Harvey

1
Statik yöntemler genel durumu değiştirmeye eğilimlidir ve mirasları da öldürürler (işlevselliği genişletmek istediğinizde, arama kodunu değiştirmeniz gerekir, çünkü türetilmiş bir sınıftaki yöntemi geçersiz kılamazsınız). Bu uygulamaya bağlısınız. Statik yöntemler alay edilemez ve bu da birim testi çok zorlaştırır. Bağımlılığı gizlerler . Eminim dahası var. Sadece körü körüne sakınmak için değil, bilinçli bir karar vermenizi istiyorum.
Tamás Szelei

2
@ Tamás Statik yöntemler, küresel durumu yalnızca bu şekilde yazarsanız değiştirirsiniz, bunu asla yapmam. Genel olarak konuşursak, yalnızca yardımcı program sınıflarında statik yöntemler, bir veya daha fazla nesne alan ve yan etkisi olmayan bir nesneyi döndüren yöntemler kullanıyorum. Bu tür yöntemlerde açıkladığınız sorunlardan hiçbiri yoktur.
Robert Harvey

1
@ TamásSzelei Küresel durumu nasıl değiştirmeye eğilimliler? Bir parametreye geçmedikçe küresel durumu bile bulamazlar.
CodesInChaos

Yanıtlar:


16

"Bunu test etmem gerekiyor mu?"

Eğer yönteminiz yine de özelse, mantığı yöntemin kendisinde birim test etmek istemezsiniz, o zaman test edilebilirlik ve sürdürülebilirlik söz konusu olduğunda, sınıfınız her iki şekilde de kara bir kutudur, sınıfınızın iç işleri onun işidir ve yalnız. Yeniden düzenleme de etkilenmeyecek, bu da dikkate alınması gereken bir şey.

Yani, bence: Hayır, "özel" bir yöntem "özel statik" yapmak uzun vadede sonuç vermeyecektir.


17

Özel statik yöntemler benim açımdan mümkün olan en kolay şeydir.

DataIn -> Yöntem -> DataOut

Harici nesnelere bağımlılık yok, yan etki yok. Onları neden kötü buluyorsun?


Teşekkür ederim. Endişelerimi soru altındaki yorumlarda anlattım.
Tamás Szelei

2
Açıkladığınız şey yalnızca statik üye değişkenlere bağlı olmayan statik yöntemler için doğrudur - bu, "iyi" ve "kötü" statik yöntem arasında bir fark yaratabilecek olan şeydir.
Doc Brown

2

Genel statik yöntemleri kullanan sınıfları test etmek zor olabilir, çünkü statik yöntemleri saplamak / taklit etmek / taklit etmek kolay değildir. Öte yandan, örnek yöntemleri, özellikle sanal veya bir arabirimi tatmin ediyorsa, kolayca alay edilebilir.

Ancak, özel statik yöntemleri kullanmak için herhangi bir neden göremiyorum. Aslında, hafızayı işgal etmek için sınıfın bir örneğine ihtiyacınız olmadığından, hafif bir performans avantajı vardır.

Öte yandan statik bir şey bir kod kokusu biraz. Bu aslında bir "yardımcı sınıf" mı? Yöntem, parametre olarak geçirilen sınıflardan birinde daha yararlı bir şekilde bulunabilir mi? Bu soruların cevabı genellikle "statik olarak iyidir" ama hatırlamaya değer.


Statik yöntemi içeren sınıf zaten zaten bellek işgal ediyor. staticAnahtar kelime korkunuz asılsız görünüyor.
Robert Harvey
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.