Rekan kerja saya memberi tahu saya harus ada logika sesedikit mungkin dalam getter dan setter.
Namun, saya yakin bahwa banyak hal dapat disembunyikan di getter dan setter untuk melindungi pengguna / programer dari detail implementasi.
Contoh apa yang saya lakukan:
public List<Stuff> getStuff()
{
if (stuff == null || cacheInvalid())
{
stuff = getStuffFromDatabase();
}
return stuff;
}
Contoh bagaimana pekerjaan memberi tahu saya untuk melakukan sesuatu (mereka mengutip 'Kode Bersih' dari Paman Bob):
public List<Stuff> getStuff()
{
return stuff;
}
public void loadStuff()
{
stuff = getStuffFromDatabase();
}
Berapa banyak logika yang sesuai dalam setter / pengambil? Apa gunanya getter dan setter kosong kecuali pelanggaran data yang disembunyikan?
public List<Stuff> getStuff() { return stuff; }
StuffGetter
antarmuka, terapkan StuffComputer
yang menghitung, dan bungkus di dalam objek StuffCacher
, yang bertanggung jawab untuk mengakses cache atau meneruskan panggilan ke tempat StuffComputer
yang dibungkusnya.