Jadi saya baru-baru ini membuat beberapa refactoring utama pada kode saya. Salah satu hal utama yang saya coba lakukan adalah membagi kelas saya menjadi objek data dan objek pekerja. Ini terinspirasi, antara lain, oleh bagian dari Kode Bersih ini :
Hibrida
Kebingungan ini kadang-kadang menyebabkan struktur data hibrida yang tidak menguntungkan yang setengah objek dan setengah struktur data. Mereka memiliki fungsi yang melakukan hal-hal signifikan, dan mereka juga memiliki variabel publik atau pengakses publik dan mutator yang, untuk semua maksud dan tujuan, membuat variabel pribadi menjadi publik, menggoda fungsi eksternal lainnya untuk menggunakan variabel-variabel itu seperti cara program prosedural menggunakan suatu struktur data.
Hibrida seperti itu membuat sulit untuk menambahkan fungsi baru tetapi juga membuatnya sulit untuk menambahkan struktur data baru. Mereka adalah yang terburuk dari kedua dunia. Hindari membuatnya. Mereka adalah indikasi dari desain kacau yang penulis tidak yakin - atau lebih buruk, tidak tahu - apakah mereka membutuhkan perlindungan dari fungsi atau jenis.
Baru-baru ini saya melihat kode ke salah satu objek pekerja saya (yang kebetulan menerapkan Pola Pengunjung ) dan melihat ini:
@Override
public void visit(MarketTrade trade) {
this.data.handleTrade(trade);
updateRun(trade);
}
private void updateRun(MarketTrade newTrade) {
if(this.data.getLastAggressor() != newTrade.getAggressor()) {
this.data.setRunLength(0);
this.data.setLastAggressor(newTrade.getAggressor());
}
this.data.setRunLength(this.data.getRunLength() + newTrade.getLots());
}
Saya langsung berkata pada diri saya sendiri "fitur iri! Logika ini harus di Data
kelas - khususnya dalam handleTrade
metode. handleTrade
Dan updateRun
harus selalu terjadi bersama". Tetapi kemudian saya berpikir "kelas data hanyalah public
struktur data, jika saya mulai melakukan itu, maka akan muncul Objek Hibrid!"
Apa yang lebih baik dan mengapa? Bagaimana Anda memutuskan mana yang harus dilakukan?