Saya akan menawarkan beberapa pengamatan:
Ya, basis data adalah keadaan global.
Sebenarnya, ini adalah negara super global, seperti yang Anda tunjukkan. Ini universal! Cakupannya mencakup apa pun atau siapa saja yang terhubung ke database. Dan, saya curiga banyak orang dengan pengalaman bertahun-tahun dapat menceritakan kisah horor tentang bagaimana "hal-hal aneh" dalam data menyebabkan "perilaku tak terduga" dalam satu atau lebih aplikasi yang relevan ...
Salah satu konsekuensi potensial dari penggunaan variabel global adalah bahwa dua "modul" yang berbeda akan menggunakan variabel itu untuk tujuan mereka sendiri yang berbeda. Dan sejauh itu, tabel database tidak berbeda. Itu bisa menjadi korban dari masalah yang sama.
Hmm ... Ini masalahnya:
Jika suatu modul tidak beroperasi secara ekstrinsik dalam beberapa cara, ia tidak melakukan apa-apa.
Modul yang berguna dapat diberikan data atau dapat menemukannya . Dan, itu bisa mengembalikan data atau bisa memodifikasi keadaan. Tetapi, jika itu tidak berinteraksi dengan dunia luar dalam beberapa cara, mungkin juga tidak melakukan apa-apa.
Sekarang, preferensi kami adalah menerima data dan mengembalikan data. Sebagian besar modul hanya lebih mudah untuk ditulis jika mereka dapat ditulis dengan mengabaikan apa yang dilakukan dunia luar. Tetapi pada akhirnya, sesuatu perlu menemukan data dan memodifikasi keadaan global eksternal itu.
Selanjutnya, dalam aplikasi dunia nyata, data ada sehingga dapat dibaca dan diperbarui oleh berbagai operasi. Beberapa masalah dicegah dengan kunci dan transaksi. Tetapi, mencegah operasi-operasi ini saling bertentangan pada prinsipnya , pada akhirnya, hanya melibatkan pemikiran yang cermat. (Dan membuat kesalahan ...)
Tetapi juga, kita umumnya tidak bekerja secara langsung dengan negara global.
Kecuali aplikasi tinggal di lapisan data (dalam SQL atau apa pun), objek modul kami bekerja dengan sebenarnya adalah salinan dari keadaan global bersama. Kita dapat melakukan apa pun yang kita inginkan itu tanpa berdampak pada keadaan bersama aktual.
Dan, dalam kasus di mana kita perlu mengubah negara global itu, dengan asumsi bahwa data yang kita berikan tidak berubah, kita biasanya dapat melakukan penguncian yang sama seperti yang kita lakukan pada global lokal kita.
Dan akhirnya, kami biasanya melakukan hal-hal yang berbeda dengan database daripada yang mungkin kami lakukan dengan global nakal.
Tampilan global yang nakal dan rusak seperti ini:
Int32 counter = 0;
public someMethod() {
for (counter = 0; counter < whatever; counter++) {
// do other stuff.
}
}
public otherMethod() {
for (counter = 100; counter < whatever; counter--) {
// do other stuff.
}
}
Kami hanya tidak menggunakan database untuk hal-hal dalam proses / operasional seperti itu. Dan mungkin sifat database yang lambat dan kenyamanan relatif dari variabel sederhana yang menghalangi kami: Interaksi kami yang lamban dan canggung dengan database hanya menjadikan mereka kandidat yang buruk untuk banyak kesalahan yang secara historis kami lakukan dengan variabel.