Beberapa bulan yang lalu saya mulai bekerja di proyek baru, dan ketika melalui kode itu membuat saya jumlah metode statis yang digunakan. Tidak hanya metode utilitas collectionToCsvString(Collection<E> elements)
, tetapi juga banyak logika bisnis disimpan di dalamnya.
Ketika saya bertanya kepada orang yang bertanggung jawab untuk alasan di balik ini, dia mengatakan itu adalah cara untuk melarikan diri dari tirani Spring . Ada sesuatu di sekitar proses berpikir ini: untuk menerapkan metode pembuatan tanda terima pelanggan, kami dapat memiliki layanan
@Service
public class CustomerReceiptCreationService {
public CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
Sekarang, pria itu mengatakan bahwa dia tidak suka memiliki kelas yang dikelola secara tidak perlu oleh Spring, pada dasarnya karena memberlakukan batasan bahwa kelas klien haruslah kacang Spring sendiri. Kami akhirnya memiliki segalanya yang dikelola oleh Spring, yang cukup banyak memaksa kami untuk bekerja dengan objek stateless dengan cara prosedural. Kurang lebih apa yang dinyatakan di sini https://www.javacodegeeks.com/2011/02/domain-driven-design-spring-aspectj.html
Jadi alih-alih kode di atas, dia punya
public class CustomerReceiptCreator {
public static CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
Saya bisa berdebat sampai menghindari Spring mengelola kelas kami jika memungkinkan, tetapi apa yang saya tidak lihat adalah manfaat dari memiliki semuanya yang statis. Metode statis ini juga stateless, jadi juga tidak terlalu OO. Saya akan merasa lebih nyaman dengan sesuatu
new CustomerReceiptCreator().createReceipt()
Dia mengklaim bahwa metode statis memiliki beberapa manfaat tambahan. Yaitu:
- Lebih mudah dibaca. Impor metode statis dan kita hanya perlu peduli dengan tindakan, tidak ada kelas apa yang melakukannya.
- Jelas merupakan metode yang bebas dari panggilan DB, jadi kinerja-bijaksana murah; dan itu adalah hal yang baik untuk membuatnya jelas, sehingga klien potensial perlu masuk ke kode dan memeriksa itu.
- Lebih mudah menulis tes.
Tapi saya hanya merasa ada sesuatu yang tidak sepenuhnya benar dengan ini, jadi saya ingin mendengar beberapa pengembang berpengalaman tentang hal ini.
Jadi pertanyaan saya adalah, apa potensi jebakan dari cara pemrograman ini?
static
metode yang Anda menggambarkan di atas hanya sebuah metode pabrik biasa. Membuat metode pabrik statis adalah konvensi yang diterima secara umum, karena sejumlah alasan kuat. Apakah metode pabrik sesuai di sini adalah masalah yang berbeda.