Dari keduanya, preferensi saya adalah metode pertama:
function insertIntoDatabase(Account account, Otherthing thing) {
database.insertMethod(account.getId(), thing.getId(), thing.getSomeValue());
}
Alasannya adalah karena perubahan dilakukan pada objek mana pun di jalan, selama perubahan itu mempertahankan getter sehingga perubahan tersebut transparan di luar objek, maka Anda memiliki sedikit kode untuk diubah dan diuji serta lebih sedikit kemungkinan untuk mengganggu aplikasi.
Ini hanya proses pemikiran saya, sebagian besar didasarkan pada bagaimana saya suka bekerja dan menyusun hal-hal seperti ini dan yang terbukti sangat mudah dikelola dan dikelola dalam jangka panjang.
Saya tidak akan masuk ke konvensi penamaan tetapi akan menunjukkan bahwa meskipun metode ini memiliki kata "database" di dalamnya, mekanisme penyimpanan dapat berubah di jalan. Dari kode yang ditampilkan, tidak ada yang mengikat fungsi ke platform penyimpanan database yang digunakan - atau bahkan jika itu adalah database. Kami hanya berasumsi karena ada dalam nama. Sekali lagi, dengan anggapan para pengambil selalu diawetkan, mengubah cara / di mana benda-benda ini disimpan akan mudah.
Saya akan memikirkan kembali fungsi dan dua objek karena Anda memiliki fungsi yang memiliki ketergantungan pada dua struktur objek, dan khususnya getter yang dipekerjakan. Sepertinya fungsi ini mengikat kedua objek menjadi satu hal kumulatif yang bertahan. Perasaan saya memberi tahu saya bahwa objek ketiga mungkin masuk akal. Saya perlu tahu lebih banyak tentang objek-objek ini dan bagaimana mereka berhubungan dalam aktualitas dan peta jalan yang diantisipasi. Tapi nyali saya condong ke arah itu.
Saat kode berdiri sekarang, pertanyaannya adalah, "Di manakah fungsi ini atau seharusnya?" Apakah itu bagian dari Akun, atau OtherThing? Kemana perginya?
Saya kira sudah ada "database" objek ketiga, dan saya condong ke arah menempatkan fungsi ini ke objek itu, dan kemudian menjadi objek pekerjaan untuk dapat menangani Akun dan OtherThing, mengubah, dan kemudian juga bertahan hasilnya .
Jika Anda pergi sejauh membuat objek ke-3 sesuai dengan pola pemetaan objek-relasional (ORM), semua lebih baik. Itu akan membuatnya sangat jelas bagi siapa pun yang bekerja dengan kode untuk memahami "Ah, ini adalah tempat Akun dan OtherThing dihancurkan bersama dan bertahan".
Tetapi bisa juga masuk akal untuk memperkenalkan objek maju, yang menangani tugas menggabungkan dan mengubah Akun dan Lainnya, tetapi tidak menangani mekanisme bertahan. Saya akan melakukannya jika Anda mengantisipasi lebih banyak interaksi dengan atau di antara dua objek ini, karena pada saat itu tumbuh saya ingin bit kegigihan diperhitungkan menjadi objek yang mengelola kegigihan saja.
Saya akan memotret untuk menjaga desain sehingga salah satu dari Akun, OtherThing, atau objek ORM ketiga dapat diubah tanpa harus juga mengubah tiga lainnya. Kecuali ada alasan yang kuat untuk tidak melakukannya, saya ingin Akun dan Lainnya menjadi mandiri dan tidak harus mengetahui cara kerja dan struktur satu sama lain.
Tentu saja, jika saya tahu konteks lengkapnya, saya mungkin akan mengubah ide-ide saya sepenuhnya. Sekali lagi, ini hanya bagaimana saya berpikir ketika saya melihat hal-hal seperti ini, dan bagaimana lean.