Geçenlerde Java'da geri dönüp birim testleri eklemek için orta ölçekli bir projenin yeniden düzenlenmesi işlemini yaptım. Singletonlar ve statiklerle alay etmenin ne kadar acı olduğunu fark ettiğimde, nihayet onlar hakkında okuduğum şeyi bu kez "aldım". (Deneyimden öğrenmesi gereken insanlardan biriyim. Oh iyi.)
Şimdi, nesneleri oluşturmak ve onları birbirine bağlamak için Spring'i kullandığımdan, static
sol ve sağ anahtar kelimelerden kurtuluyorum . (Potansiyel olarak bunu taklit istiyor olsaydı, doğru, Math.abs () olduğunu aynı anlamda gerçekten statik değil mi?) Şeydir, ben kullanma alışkanlığı içine kazanılmış static
bir yöntem itimat etmediğini belirtmek için herhangi bir nesne durumunda. Örneğin:
//Before
import com.thirdparty.ThirdPartyLibrary.Thingy;
public class ThirdPartyLibraryWrapper {
public static Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
ThirdPartyLibraryWrapper.newThingy(input);
//After
public class ThirdPartyFactory {
public Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
thirdPartyFactoryInstance.newThingy(input);
İşte burada dokunaklı bir şekilde hissediliyor. Eski yolu sevdim çünkü büyük harf bana Math.sin (x) gibi ThirdPartyLibraryWrapper.newThingy (x) 'in her seferinde aynı şeyi yaptığını söyledi. Nesnenin yapmasını istediğim şeyi nasıl yapacağını değiştirecek nesne durumu yok. İşte düşündüğüm bazı olası cevaplar.
- Kimse bu şekilde hissetmiyor, bu yüzden benimle ilgili bir sorun var. Belki de OO'nun bir şeyler yapma şeklini gerçekten içselleştirmedim! Belki Java ile yazıyorum ama FORTRAN ya da daha çok düşünüyorum. (FORTRAN'ı hiç yazmadım çünkü bu etkileyici olurdu.)
- Belki statiklik kod hakkında muhakeme amacıyla değişmezlik için bir tür proxy olarak kullanıyorum. Olduğu söyleniyor, neyin durumunun ne olduğunu ve neyin olmadığını bilmek için kodumda hangi ipuçlarının olması gerekir ?
- Belki de iyi nesne metaforları seçersem bu bedavaya gelmelidir? örneğin
thingyWrapper
,Thingy
kendisinin değişebilen sarılı durumdan bağımsız bir duruma sahip gibi görünmüyor . Benzer şekilde, bununthingyFactory
gibi bir ses değişmez olmalı, ancak yaratılışta seçilen farklı stratejilere sahip olabilir.