Menerapkan pola Pengamat dari database umumnya harus dihindari.
Mengapa? Itu bergantung pada teknologi milik vendor (non-standar), mempromosikan penguncian vendor basis data dan mendukung risiko, dan menyebabkan sedikit kembung. Dari perspektif perusahaan, jika tidak dilakukan dengan cara yang terkendali, ini bisa terlihat seperti "skunkworks" - menerapkan perilaku yang tidak biasa yang biasanya dicakup oleh pola dan alat aplikasi dan integrasi. Jika diimplementasikan pada tingkat yang sangat halus, ini dapat mengakibatkan penggabungan yang erat ke perubahan data kecil dengan sejumlah besar komunikasi dan pemrosesan yang tidak terduga, yang memengaruhi kinerja. Sebuah roda tambahan pada mesin dapat menjadi titik pemutusan ekstra - mungkin sensitif terhadap O/S, jaringan, dan konfigurasi keamanan atau mungkin ada kerentanan keamanan dalam teknologi vendor.
Jika Anda mengamati data transaksional yang dikelola oleh aplikasi Anda:
- terapkan pola Pengamat di aplikasi Anda. Misalnya. Di Java, spesifikasi CDI dan javabeans mendukung ini secara langsung, dan desain khusus OO sesuai dengan buku Gang Of Four adalah solusi sempurna.
- secara opsional mengirim pesan ke aplikasi lain. Filter/pencegat, pesan MDB, acara CDI, dan layanan web juga berguna untuk notifikasi.
Jika pengguna secara langsung memodifikasi data master dalam database, maka:
- menyediakan halaman admin tunggal dalam aplikasi Anda untuk mengontrol penyegaran data master ATAU
- menyediakan aplikasi manajemen data master terpisah dan mengirim pesan ke aplikasi yang bergantung ATAU
- (pendekatan terbaik) mengelola pengeditan data master dalam hal kualitas (ulasan, pengujian, dll) dan waktu (perlakukan sama seperti perubahan kode), promosikan melalui lingkungan, terapkan dan segarkan data / mulai ulang aplikasi ke jadwal terkelola
Jika Anda mengamati data transaksional yang dikelola oleh aplikasi lain (integrasi database bersama) ATAU Anda menggunakan integrasi tingkat data seperti ETL untuk menyediakan data pada aplikasi Anda:
- cobalah agar entitas data ditulis hanya oleh satu aplikasi (hanya-baca oleh yang lain)
- tabel kontrol staging polling/ETL untuk memahami apa/kapan perubahan terjadi ATAU
- gunakan ekstensi kepemilikan tingkat JDBC/ODBC untuk pemberitahuan atau polling, juga disebutkan dalam jawaban Alex Poole ATAU
- memfaktorkan ulang operasi data yang tumpang tindih dari 2 aplikasi menjadi layanan SOA bersama dapat menghindari persyaratan pengamatan atau mengangkatnya dari operasi data ke pesan aplikasi/SOA tingkat yang lebih tinggi
- gunakan ESB atau adaptor database untuk memanggil aplikasi Anda untuk pemberitahuan atau titik akhir WS untuk transfer data massal (mis. Apache Camel, Apache ServiceMix, Mule ESB, Openadaptor)
- hindari penggunaan infrastruktur ekstensi basis data seperti pipa atau antrian lanjutan
Jika Anda menggunakan perpesanan (kirim atau terima), lakukan dari aplikasi Anda. Pesan dari DB sedikit antipattern. Sebagai upaya terakhir, dimungkinkan untuk menggunakan pemicu yang memanggil layanan web (http://www.Oracle.com/technetwork/developer-tools/jdev/dbcalloutws-howto-084195.html ), tetapi sangat hati-hati diperlukan untuk melakukan ini dengan cara yang sangat kasar, memanggil proses bisnis (sub) ketika satu set data berubah, daripada mengerjakan operasi jenis CRUD berbutir halus. Sebaiknya memicu pekerjaan dan meminta pekerjaan memanggil layanan web di luar transaksi.