Apakah umur logika domain dalam database sudah berakhir? [Tutup]

9

Saya baru-baru ini menemukan pendapat ini dari 2016 mengatakan bahwa masih ada alasan untuk logika domain dalam database.

Saya pikir ini benar-benar usang. Saya hanya ingin tahu apakah pria itu masih hidup di tahun 90-an atau ini benar-benar benar. Sisihkan sistem warisan.

Bagaimana dengan memiliki logika domain dalam database karena persyaratan keamanan. Apakah itu benar-benar hal yang harus dilakukan?

ps-aux
sumber
3
Apakah Anda benar-benar membaca artikel itu sepenuhnya? Saya pikir penulis menjelaskan maksudnya dengan sangat baik, dan menjelaskan bagian BL mana yang menurutnya paling baik ditempatkan dalam database, dan bagian mana yang tidak. Jadi yang poin dari artikel yang tepat Anda struggeling dengan?
Doc Brown
Ya, ditutup pada 18 Februari 2009 dan sekarang salah.
Michael Durrant
Ini penasaran. Saya membaca orang ini, memberikan banyak contoh SQL (sangat terkait dengan Oracle) dan kemudian saya tidak dapat menghindari untuk mengingat pelanggan saya mengatakan kepada saya: Saya lupa untuk membeli lisensi Oracle untuk PRE env. Kami memilikinya untuk PRO tetapi tidak untuk PRE. Anda harus menyebarkan aplikasi, terhadap MySQL di PRE dan Oracle di PRO, untuk sementara waktu ... Saya akan bertanya kepada orang itu di mana semua fitur shinny oracle berjalan sekarang ... (Masalahnya di sini adalah karena suatu alasan Saya tidak ingin tahu, arsitek memutuskan untuk pergi cara pemetaan asli Sql - baris bukan Orm, tetapi masih dekat dengan masalah dikunci ke penyedia DB) .
Laiv
@Laiv: Itu gila, dan tidak ada jumlah ORM atau abstraksi lain yang akan menyelamatkan Anda. Anda pada dasarnya menyebarkan kode yang belum diuji untuk produksi dengan pengaturan seperti itu.
JacquesB
2
"Apakah umur logika domain dalam database sudah berakhir?" Ya Tuhan, kuharap begitu.
makan

Jawaban:

13

Pemrogram saat ini tampaknya berpikir sangat dogmatis, terutama ketika mereka membaca pemikiran yang ditulis orang lain di blog mereka.

Ambil blog Pengodean Bob Martin, misalnya. Sebagai pengamatan umum, saya menemukan tulisan Bob Martin cukup jelas dan jernih, sehingga membuat saya bingung bahwa orang-orang terus-menerus menjadi bingung dengan hal-hal yang ditulisnya, seperti prinsip-prinsip SOLID. Mereka terpaku pada apa yang seharusnya menjadi "Tanggung Jawab Tunggal", atau mengapa beberapa kelas melanggar prinsip-prinsip Liskov, ketika apa yang seharusnya mereka lakukan adalah berusaha keras untuk menulis kode yang lebih baik, dan memperoleh pengalaman terlebih dahulu, sehingga apa yang mereka baca di blog memiliki beberapa konteks.


Pada dasarnya apa yang Anda katakan adalah bahwa database harus berisi tabel dan data, dan hanya itu yang harus dikandungnya. Tetapi basis data secara unik cocok untuk melakukan hal-hal tertentu yang ... yah, basis data bagus.

Artikel tersebut mengutip hal-hal berikut:

  • Integritas dan Validasi Data (mis., Batasan nol dan unik)
  • Keamanan Tingkat Baris
  • Menulis API Menggunakan Prosedur Tersimpan
  • Menghitung saldo
  • Mengajukan pertanyaan pada basis data (mis., Meminta dan melaporkan)
  • Menghindari masalah ORM seperti N +1

sebagai hal yang cocok untuk dimasukkan ke dalam database. Saya kebetulan setuju dengannya.

Alasan Anda tidak memasukkan logika bisnis (secara umum) ke dalam basis data:

  • Penguncian vendor
  • Basis data Anda bukan otoritas pusat
  • Tim Anda tidak berpikir secara relasional
  • Perkakas inferior.

Tetapi hal-hal ini umumnya hanya berlaku untuk teknik-teknik, alat-alat dan pelatihan yang datanya tidak cocok secara unik.

Jadi, seperti halnya teknik lain dalam pengembangan perangkat lunak, itu tergantung. Anda mengevaluasi alternatif Anda, dan membuat keputusan berdasarkan apa yang Anda yakini sebagai tindakan terbaik untuk aplikasi spesifik Anda.

Robert Harvey
sumber
3
Perincian yang sangat bagus dan cara yang lebih baik untuk membingkai pertanyaan.
candied_orange
9

masukkan deskripsi gambar di sini

Usia kuda dan kereta sudah berakhir, namun Anda masih bisa membeli cambuk kereta.

Mengapa? Ketika mobil lebih cepat, lebih murah untuk dirawat, dan mengabaikannya tidak akan menghasilkan kunjungan dari masyarakat yang manusiawi, mengapa kuda dan kereta masih ada?

Karena terkadang Anda memiliki alasan berbeda untuk melakukan sesuatu selain alasan populer.

Apa yang harus Anda pelajari adalah mengapa logika domain dalam database menyebabkan masalah dan apa yang mungkin bisa dikeluarkan oleh siapa pun. Kemudian putuskan pikiran Anda sendiri.

Pandangan pribadi saya:

Logika domain adalah tentang perilaku. Basis data adalah tentang ketekunan, hubungan, dan, yah, data. Ketika Anda melihatnya dengan cara ini, aturan bisnis seharusnya tidak ada dalam database.

Di sisi lain siapa, kata database tidak bisa memiliki perilaku? Saya telah membangun basis data kantor menggunakan Pembuat Film. Orang-orang menyebutnya basis data tetapi sebenarnya juga merupakan lingkungan pengembangan aplikasi secara keseluruhan. Semuanya mulus diintegrasikan menjadi satu, dan disebut database.

Keajaiban biasanya ditemukan di antara pandangan ekstrem. Saya tidak ragu lagi bisa dibuat bekerja. Ketika mencoba menemukan bagian tengahnya, tergoda untuk hanya mengikuti kawanannya. Saya akan memperingatkannya di sini.

Suatu sistem yang menyimpan logika domain dalam database dapat bekerja dengan baik. Sebuah sistem yang menjaga logika domain dari database dapat bekerja dengan baik. Sebuah sistem yang menggabungkan logika domain di kedua tempat akan membuat saya gila. Saya tidak akan tahu di mana harus menempatkan perilaku baru. Saya tidak akan yakin di mana menemukan perilaku lama.

Jika Anda masih tidak dapat memutuskan untuk melempar koin dan mengambil keputusan sebagai Injil untuk proyek tertentu. Sejauh yang saya tahu bahwa koin tahu yang terbaik dan juga orang lain.

candied_orange
sumber
1
Jawaban Anda kedengarannya Anda bahkan tidak melihat ke artikel yang ditautkan oleh OP (bukankah saya mengatakan penulisnya benar atau salah), tetapi dapatkah Anda memberi tahu kami di mana Anda setuju atau berbeda dengan pandangan yang dijelaskan dalam artikel itu?
Doc Brown
@DocBrown Saya juga tidak membacanya, tetapi jawaban ini bagus juga di mana saya sepenuhnya setuju. Dan itu membahas pertanyaan OP (kalimat terakhir), bukan artikel yang dikutip.
qwerty_so
@DocBrown Saya tidak berpikir artikel itu membaca artikel Paman Bob yang dikutipnya : "Arsitektur plugin sangat kuat karena aturan bisnis bernilai tinggi yang stabil dapat dicegah tergantung pada modul bernilai rendah yang mudah menguap seperti antarmuka pengguna dan database.". Paman Bob memiliki pandangan yang lebih kuat terhadap gagasan ini daripada saya. Artikel ini diambil dari artikel Bob dan membuatnya tampak seperti Bob mengatakan sesuatu yang bukan dirinya.
candied_orange
2

Saya punya kasus di mana menyelesaikannya di lapisan bisnis akan menjadi pembunuh kinerja nyata.

Konsep keamanan aplikasi OO kami terdiri dari peran DAN grup. Dan keduanya adalah struktur rekursif. Kami menulis prosedur tersimpan yang menyelesaikan izin untuk pengguna pada objek domain.

Sebenarnya ada sedikit kebutuhan untuk kembali ke logika basis data. Tetapi dalam kasus ini saya memutuskan untuk pergi ke sana. Tapi apa yang selalu harus Anda pertimbangkan: Anda menyerah abstraksi. Segera setelah Anda memiliki logika bisnis dalam database, Anda memiliki hari yang sulit untuk mengubah lapisan kegigihan Anda. Jadi berhati-hatilah.

oopexpert
sumber