Kami saat ini menggunakan Entity Framework sebagai ORM di beberapa aplikasi web, dan sampai sekarang, itu cocok untuk kami karena semua data kami disimpan dalam satu basis data. Kami menggunakan pola repositori, dan memiliki layanan (lapisan domain) yang menggunakannya, dan mengembalikan entitas EF langsung ke pengontrol ASP.NET MVC.
Namun, suatu persyaratan telah muncul untuk menggunakan API pihak ke-3 (melalui layanan web) yang akan memberi kami informasi tambahan yang berkaitan dengan pengguna dalam basis data kami. Di basis data Pengguna lokal kami, kami akan menyimpan ID eksternal yang dapat kami berikan kepada API untuk mendapatkan informasi tambahan. Ada sedikit informasi yang tersedia, tetapi demi kesederhanaan, salah satunya terkait dengan perusahaan pengguna (nama, manajer, kamar, jabatan, lokasi, dll). Informasi ini akan digunakan di berbagai tempat di seluruh aplikasi web kami - bukan hanya digunakan di satu tempat.
Jadi pertanyaan saya adalah, di mana tempat terbaik untuk mengisi dan mengakses informasi ini? Karena digunakan di berbagai tempat, tidaklah masuk akal untuk mengambilnya secara ad-hoc di mana pun kami menggunakan aplikasi web - jadi masuk akal untuk mengembalikan data tambahan ini dari lapisan domain.
Pikiran awal saya adalah hanya untuk membuat kelas model pembungkus yang akan berisi entitas EF (EFUser), dan kelas 'ApiUser' baru yang berisi informasi baru - dan ketika kami mendapatkan pengguna, kami mendapatkan EFUser, dan kemudian mendapatkan tambahan info dari API, dan isi objek ApiUser. Namun, sementara ini tidak masalah untuk mendapatkan pengguna tunggal, itu jatuh ketika mendapatkan beberapa pengguna. Kami tidak dapat menekan API ketika mendapatkan daftar pengguna.
Pikiran kedua saya adalah hanya menambahkan metode tunggal ke entitas EFUser yang mengembalikan ApiUser, dan hanya mengisinya ketika diperlukan. Ini menyelesaikan masalah di atas karena kami hanya mengaksesnya saat kami membutuhkannya.
Atau pemikiran terakhir adalah menyimpan salinan data lokal di dalam basis data kami, dan menyinkronkannya dengan API ketika pengguna masuk. Ini adalah pekerjaan minimal karena ini hanya proses sinkronisasi - dan kami tidak memiliki overhead untuk memukul DB dan API setiap kali kami ingin mendapatkan informasi pengguna. Namun, ini berarti menyimpan data di dua tempat, dan juga berarti data tersebut sudah usang bagi setiap pengguna yang belum masuk untuk sementara waktu.
Adakah yang punya saran atau saran tentang cara terbaik untuk menangani skenario semacam ini?
it's not really sensible to fetch it on an ad-hoc basis
- Kenapa? Untuk alasan kinerja?