Kekhawatiran adalah konsep yang sederhana namun kuat. Itu ada untuk digunakan kembali kode. Pada dasarnya, idenya adalah untuk mengekstrak potongan kode umum dan / atau konteks tertentu untuk membersihkan model dan menghindarinya menjadi terlalu gemuk dan tidak dapat diatur.
Saya ingin menentukan secara eksplisit bahwa Anda harus menggunakan objek layanan untuk menyediakan fungsionalitas yang bukan merupakan perhatian dari objek tertentu. Misal sebuah organisasi memiliki banyak pengguna. Sekarang admin organisasi perlu mengekspor CSV semua pengguna untuk organisasi ini. Kode ini dapat ditempatkan dalam model organisasi tetapi karena ini bukan tanggung jawab objek organisasi, kode ini harus ditempatkan di kelas di mana Anda hanya meneruskan objek organisasi dan mengembalikan CSV dari semua pengguna.
class Services::GenerateCsv
def self.get_users org
#add logic the fetch users for the org and generate the CSV and return the CSV data
end
end
Kapan pun Anda membutuhkan pembuatan CSV, Anda dapat menempatkan logika itu di kelas di atas. Pendekatan ini menjaga objek (dalam hal ini, model organisasi) bersih dari kode yang seharusnya tidak menjadi tanggung jawabnya. Prinsip umum yang saya ikuti adalah: jika kode itu memodifikasi objek diri, pindahkan kode ke objek layanan.
Catatan: Pertanyaan Anda tentang masalah tetapi saya berpikir untuk menambahkan beberapa hal tambahan yang saya ikuti untuk menjaga basis kode tetap bersih dan dapat dikelola karena dapat membantu sesama pemrogram. Pendekatan di atas masih bisa diperdebatkan.