Hari ini saya terlibat perdebatan sengit dengan pengembang lain di organisasi saya tentang di mana dan bagaimana cara menambahkan metode ke kelas yang dipetakan basis data. Kami menggunakan sqlalchemy
, dan bagian utama dari basis kode yang ada dalam model database kami sedikit lebih dari sekumpulan properti yang dipetakan dengan nama kelas, terjemahan yang hampir mekanis dari tabel database ke objek python.
Dalam argumen, posisi saya adalah bahwa nilai utama menggunakan ORM adalah Anda dapat melampirkan perilaku tingkat rendah dan algoritma ke kelas yang dipetakan. Model adalah kelas pertama, dan persisten kedua (mereka bisa gigih menggunakan xml dalam sistem file, Anda tidak perlu peduli). Pandangannya adalah bahwa setiap perilaku sama sekali adalah "logika bisnis", dan harus milik di mana saja tetapi dalam model persisten, yang hanya akan digunakan untuk kegigihan basis data.
Saya tentu saja berpikir bahwa ada perbedaan antara apa itu logika bisnis, dan harus dipisahkan, karena memiliki beberapa isolasi dari tingkat yang lebih rendah tentang bagaimana yang diterapkan, dan logika domain, yang saya percaya adalah abstraksi yang diberikan oleh kelas model membantah dalam paragraf sebelumnya, tetapi saya mengalami kesulitan meletakkan jari saya pada apa itu. Saya memiliki perasaan yang lebih baik tentang apa yang mungkin menjadi API (yang, dalam kasus kami, adalah HTTP "ReSTful"), di mana pengguna memohon API dengan apa yang ingin mereka lakukan , berbeda dari apa yang mereka boleh lakukan, dan bagaimana selesai.
tl; dr: Hal-hal apa saja yang dapat atau harus dilakukan dalam suatu metode dalam kelas yang dipetakan saat menggunakan ORM, dan apa yang harus ditinggalkan, untuk hidup dalam lapisan abstraksi lain?