Bu cevabı yaklaşık dört yıl önce yazdım ve fikrim değişmedi. Ancak o zamandan beri mikro hizmetler cephesinde önemli gelişmeler oldu. Sonunda mikro hizmetlere özel notlar ekledim ...
Oyumu destekleyecek gerçek dünya deneyimi ile bu fikre karşı çıkacağım.
Tek bir veritabanı için beş bağlamı olan büyük bir uygulamaya getirildim. Sonunda, tek bir bağlama geri dönmek dışında, tüm bağlamları kaldırdık.
İlk başta çoklu bağlam fikri iyi bir fikir gibi görünüyor. Veri erişimimizi etki alanlarına ayırabilir ve birkaç temiz, hafif bağlam sağlayabiliriz. DDD gibi geliyor değil mi? Bu veri erişimimizi basitleştirecektir. Başka bir argüman performans için sadece ihtiyacımız olan içeriğe erişmemiz.
Ancak uygulamada, uygulamamız büyüdükçe, tablolarımızın birçoğu çeşitli bağlamlarımızda ilişkileri paylaştı. Örneğin, bağlam 1'deki tablo A'ya yönelik sorgular, bağlam 2'deki tablo B'ye katılmayı da gerektirdi.
Bu bize birkaç kötü seçenek bıraktı. Tabloları çeşitli bağlamlarda çoğaltabiliriz. Bunu denedik. Bu, her varlığın benzersiz bir ada sahip olmasını gerektiren bir EF kısıtlaması da dahil olmak üzere çeşitli haritalama sorunları yarattı. Böylece farklı bağlamlarda Person1 ve Person2 adlı varlıklarla karşılaştık. Bunun bizim için zayıf tasarım olduğunu iddia edebiliriz, ancak en iyi çabalarımıza rağmen, uygulamamız gerçek dünyada bu şekilde büyüdü.
Ayrıca ihtiyacımız olan verileri elde etmek için her iki bağlamı da sorgulamayı denedik. Örneğin, iş mantığımız bağlam 1'den ihtiyaç duyulan şeyin yarısını ve bağlam 2'den yarısını sorgulayacaktır. Bunun bazı önemli sorunları vardı. Tek bir bağlamda tek bir sorgu yapmak yerine, farklı bağlamlarda birden fazla sorgu yapmak zorunda kaldık. Bunun gerçek bir performans cezası var.
Sonunda, iyi haber şu ki, çoklu bağlamları çıkarmanın kolay olduğu. Bağlamın hafif bir nesne olması amaçlanmıştır. Bu yüzden performansın birden fazla bağlam için iyi bir argüman olduğunu düşünmüyorum. Hemen hemen her durumda, tek bir bağlamın daha basit, daha az karmaşık ve muhtemelen daha iyi performans göstereceğine inanıyorum ve işe yaraması için bir sürü çözüm uygulamak zorunda kalmayacaksınız.
Birden fazla bağlamın faydalı olabileceği bir durum düşündüm. Aslında birden fazla etki alanı içerdiği veritabanıyla ilgili fiziksel bir sorunu gidermek için ayrı bir bağlam kullanılabilir. İdeal olarak, bir bağlam bire bir etki alanına, bu da bire bir veritabanına olur. Başka bir deyişle, bir tablo kümesi belirli bir veritabanındaki diğer tablolarla hiçbir şekilde ilgili değilse, muhtemelen ayrı bir veritabanına çekilmelidir. Bunun her zaman pratik olmadığını anlıyorum. Ancak bir dizi tablo onları ayrı bir veritabanına ayırmaktan rahat hissederseniz (ancak seçmemeyi tercih ederseniz), ayrı bir bağlam kullanmak için davayı görebiliyordum, ancak sadece iki ayrı etki alanı olduğu için görebiliyordum.
Mikro hizmetler ile ilgili olarak, tek bir bağlam hala mantıklıdır. Ancak, mikro hizmetler için, her hizmetin yalnızca o hizmetle ilgili veritabanı tablolarını içeren kendi bağlamı olacaktır. Diğer bir deyişle, hizmet x tablo 1 ve 2'ye ve hizmet y tablo 3 ve 4'e erişirse, her hizmetin o hizmete özgü tabloları içeren kendine özgü bir bağlamı olur.
Düşüncelerinle ilgileniyorum.