Saya menulis jawaban ini sekitar empat tahun lalu dan pendapat saya belum berubah. Namun sejak itu ada perkembangan signifikan di bidang layanan mikro. Saya menambahkan catatan spesifik layanan mikro di akhir ...
Saya akan mempertimbangkan ide itu, dengan pengalaman dunia nyata untuk mendukung suara saya.
Saya dibawa ke aplikasi besar yang memiliki lima konteks untuk satu database. Pada akhirnya, kami akhirnya menghapus semua konteks kecuali satu - kembali ke satu konteks.
Pada awalnya ide tentang berbagai konteks sepertinya ide yang bagus. Kami dapat memisahkan akses data kami ke dalam domain dan menyediakan beberapa konteks ringan bersih. Kedengarannya seperti DDD, kan? Ini akan menyederhanakan akses data kami. Argumen lain adalah untuk kinerja karena kita hanya mengakses konteks yang kita butuhkan.
Namun dalam praktiknya, seiring pertumbuhan aplikasi kami, banyak dari tabel kami berbagi hubungan di berbagai konteks kami. Misalnya, kueri ke tabel A dalam konteks 1 juga diminta bergabung dengan tabel B dalam konteks 2.
Ini meninggalkan kita dengan beberapa pilihan yang buruk. Kita bisa menduplikasi tabel dalam berbagai konteks. Kami mencoba ini. Ini menciptakan beberapa masalah pemetaan termasuk kendala EF yang mengharuskan setiap entitas memiliki nama yang unik. Jadi kami berakhir dengan entitas bernama Person1 dan Person2 dalam konteks yang berbeda. Orang dapat berargumen bahwa ini adalah desain yang buruk di pihak kami, tetapi terlepas dari upaya terbaik kami, ini adalah bagaimana aplikasi kami sebenarnya tumbuh di dunia nyata.
Kami juga mencoba menanyakan kedua konteks untuk mendapatkan data yang kami butuhkan. Misalnya, logika bisnis kami akan meminta setengah dari yang diperlukan dari konteks 1 dan setengah lainnya dari konteks 2. Ini memiliki beberapa masalah besar. Alih-alih melakukan satu permintaan terhadap satu konteks, kami harus melakukan beberapa permintaan di berbagai konteks. Ini memiliki penalti performa nyata.
Pada akhirnya, kabar baiknya adalah mudah untuk menghapus berbagai konteks. Konteksnya dimaksudkan untuk menjadi objek yang ringan. Jadi saya tidak berpikir kinerja adalah argumen yang bagus untuk banyak konteks. Dalam hampir semua kasus, saya percaya satu konteks lebih sederhana, lebih kompleks, dan kemungkinan akan berkinerja lebih baik, dan Anda tidak perlu menerapkan banyak upaya untuk membuatnya bekerja.
Saya memikirkan satu situasi di mana banyak konteks bisa berguna. Konteks terpisah dapat digunakan untuk memperbaiki masalah fisik dengan database yang sebenarnya berisi lebih dari satu domain. Idealnya, konteks akan menjadi satu-ke-satu ke domain, yang akan menjadi satu-ke-satu ke database. Dengan kata lain, jika satu set tabel sama sekali tidak terkait dengan tabel lain dalam database yang diberikan, mereka mungkin harus ditarik ke dalam database yang terpisah. Saya menyadari ini tidak selalu praktis. Tetapi jika satu set tabel sangat berbeda sehingga Anda akan merasa nyaman memisahkan mereka ke dalam database yang terpisah (tetapi Anda memilih untuk tidak melakukannya) maka saya dapat melihat kasus untuk menggunakan konteks yang terpisah, tetapi hanya karena sebenarnya ada dua domain yang terpisah.
Mengenai layanan mikro, satu konteks tunggal masih masuk akal. Namun, untuk layanan mikro, setiap layanan akan memiliki konteksnya sendiri yang hanya mencakup tabel basis data yang relevan dengan layanan itu. Dengan kata lain, jika layanan x mengakses tabel 1 dan 2, dan layanan y mengakses tabel 3 dan 4, setiap layanan akan memiliki konteks uniknya sendiri yang mencakup tabel khusus untuk layanan tersebut.
Saya tertarik dengan pemikiran Anda.