Şu anda Entity Framework'ü birkaç web uygulamasında ORM olarak kullanıyoruz ve şimdiye kadar tüm verilerimiz tek bir veritabanında saklandığı için bize çok uygun. Havuz desenini kullanıyoruz ve bunları kullanan hizmetlerimiz (etki alanı katmanı) var ve EF varlıklarını doğrudan ASP.NET MVC denetleyicilerine döndürüyoruz.
Bununla birlikte, veritabanımızdaki kullanıcıyla ilgili ek bilgi veren bir 3. taraf API (bir web servisi aracılığıyla) kullanmak için bir gereksinim ortaya çıkmıştır. Yerel Kullanıcı veritabanımızda, ek bilgi almak için to API'ya sağlayabileceğimiz harici bir kimlik saklayacağız. Biraz bilgi mevcut, ancak basitlik açısından, bunlardan biri kullanıcının şirketi (isim, yönetici, oda, iş unvanı, yer vb.) İle ilgilidir. Bu bilgiler, tek bir yerde kullanılmasının aksine, web uygulamalarımızdaki çeşitli yerlerde kullanılacaktır.
Öyleyse sorum şu, bu bilgiye ulaşmak ve bu bilgilere erişmek için en iyi yer neresi? Çeşitli yerlerde kullanıldığı için, web uygulamasında kullandığımız her yerde geçici olarak getirmek gerçekten mantıklı değil - bu nedenle bu ek verileri etki alanı katmanından döndürmek mantıklı.
İlk düşüncem sadece EF varlığını (EFUser) içerecek bir sarıcı model sınıfı ve yeni bilgileri içeren yeni bir 'ApiUser' sınıfı yaratmaktı ve bir kullanıcı aldığımızda EFUser'i alıp ek API'dan bilgi edinin ve ApiUser nesnesini doldurun. Ancak, bu tek kullanıcı elde etmek için iyi olsa da, birden fazla kullanıcı alırken düşer. Bir kullanıcı listesi alırken API'ya ulaşamayız.
İkinci düşüncem EFUser varlığına ApiUser döndüren tek bir yöntem eklemek ve sadece gerektiğinde doldurmaktı. Bu, yukarıdaki sorunu yalnızca ihtiyaç duyduğumuzda eriştiğimiz için çözer.
Veya son düşünce, veri tabanımızdaki verilerin yerel bir kopyasını tutmak ve kullanıcı oturum açtığında API ile senkronize etmekti. Bu sadece bir senkronizasyon işlemi olduğu için minimum bir iştir - ve isabet yükümüz yok kullanıcı bilgisini her istediğimizde DB ve API. Ancak, bu, verilerin iki yerde depolanması anlamına gelir ve ayrıca bir süredir oturum açmamış herhangi bir kullanıcı için verilerin güncel olmadığı anlamına gelir.
Bu tür bir senaryoyu en iyi nasıl ele alacağınız konusunda herhangi bir tavsiye veya öneriniz var mı?
it's not really sensible to fetch it on an ad-hoc basis
-- Neden? Performans nedenleriyle?