Birkaç ay önce yeni bir projede çalışmaya başladım ve koddan geçerken bana kullanılan statik yöntemlerin miktarını okudum. Sadece yararlı yöntemler olarak değil collectionToCsvString(Collection<E> elements)
, aynı zamanda birçok iş mantığı da saklanır.
Bunun arkasındaki mantıktan sorumlu adama sorduğumda, bunun Bahar'ın zulmünden kaçmanın bir yolu olduğunu söyledi . Bu düşünme sürecinin etrafında bir şey var: bir müşteri makbuzu oluşturma yöntemi uygulamak için bir hizmetimiz olabilir.
@Service
public class CustomerReceiptCreationService {
public CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
Şimdi, adam Bahar tarafından gereksiz yere yönetilen sınıflara sahip olmaktan hoşlanmadığını söyledi, çünkü temel olarak müşteri sınıflarının Bahar fasulyesi olması gerektiğine dair kısıtlama getiriyor. Sonunda bizi vatansız nesnelerle prosedürel bir şekilde çalışmaya zorlayan Spring tarafından yönetilen her şeye sahip oluruz. Az ya da çok burada belirtilenler https://www.javacodegeeks.com/2011/02/domain-driven-design-spring-aspectj.html
Yukarıdaki kod yerine,
public class CustomerReceiptCreator {
public static CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
Mümkün olduğunda Spring'in sınıflarımızı yönetmesini önleme noktasına gelebilirim, ama görmediğim her şeyin statik olmasının yararı. Bu statik yöntemler de vatansızdır, bu yüzden çok OO da değildir. Bir şeyle daha rahat hissederdim
new CustomerReceiptCreator().createReceipt()
Statik yöntemlerin bazı ekstra faydaları olduğunu iddia ediyor. Yani:
- Daha kolay okunur. Statik yöntemi içe aktarın ve sadece eylemi önemsemeliyiz, sınıfın ne yaptığını anlamıyoruz.
- Açıkçası DB çağrıları ücretsiz bir yöntem, bu yüzden performans açısından ucuz; ve bunu açıklığa kavuşturmak iyi bir şeydir, böylece potansiyel müşterinin koda girmesi ve bunu kontrol etmesi gerekir.
- Testleri yazmak daha kolay.
Ancak bununla tam olarak doğru olmayan bir şey olduğunu hissediyorum, bu yüzden bu konuda daha deneyimli geliştiricilerin düşüncelerini duymak istiyorum.
Benim sorum şu, bu programlama tarzının potansiyel tuzakları neler?
static
açıkladığınız yöntem sadece sıradan bir fabrika yöntemidir. Fabrika yöntemlerini statik hale getirmek, birçok zorlayıcı nedenden ötürü, genel kabul görmüş bir sözleşmedir. Burada fabrika yönteminin uygun olup olmadığı farklı bir konudur.