В даний час ми використовуємо Entity Framework в якості ОРМ для кількох веб-додатків, і до цього часу він нам добре підходить, оскільки всі наші дані зберігаються в одній базі даних. Ми використовуємо шаблон репозиторію та маємо служби (доменний рівень), які використовують їх, і повертають об'єкти EF безпосередньо до контролерів ASP.NET MVC.
Однак виникла вимога використовувати API сторонніх розробників (через веб-сервіс), який надасть нам додаткову інформацію, що стосується користувача в нашій базі даних. У нашій локальній базі даних користувачів ми зберігатимемо зовнішній ідентифікатор, який ми можемо надати API для отримання додаткової інформації. Інформації доступно небагато, але для простоти одна з них стосується компанії користувача (ім'я, менеджер, кімната, назва роботи, місцезнаходження тощо). Ця інформація буде використовуватися в різних місцях у наших веб-додатках - на відміну від використання в одному місці.
Отже, моє запитання - де найкраще розмістити та отримати доступ до цієї інформації? Оскільки він використовується в різних місцях, не дуже розумно це діставати на спеціальній основі, де б ми не використовувались у веб-додатку - тому є сенс повернути ці додаткові дані з доменного шару.
Моя початкова думка полягала лише в тому, щоб створити модельний клас обгортки, який містив би об'єкт EF (EFUser), і новий клас "ApiUser", що містить нову інформацію - і коли ми отримуємо користувача, ми отримуємо EFUser, а потім отримуємо додатковий інформація від API та заповнити об'єкт ApiUser. Однак, хоча це буде добре для отримання одиноких користувачів, це стає причиною отримання кількох користувачів. Ми не можемо потрапити на API при отриманні списку користувачів.
Друга моя думка полягала в тому, щоб додати єдиний метод до об'єкта EFUser, який повертає ApiUser, і просто заповнювати його, коли це потрібно. Це вирішує вказану вище проблему, оскільки ми отримуємо доступ до неї лише тоді, коли нам це потрібно.
Або остання думка полягала в тому, щоб зберегти локальну копію даних у нашій базі даних та синхронізувати її з API, коли користувач увійде в систему. Це мінімальна робота, оскільки це просто процес синхронізації - і ми не маємо накладних витрат. DB та API щоразу, коли ми хочемо отримати інформацію про користувача. Однак це означає зберігання даних у двох місцях, а також означає, що дані застаріли для будь-якого користувача, який не входив протягом певного часу.
Хтось має поради чи пропозиції щодо того, як найкраще впоратися з таким сценарієм?
it's not really sensible to fetch it on an ad-hoc basis
- Чому? З причин ефективності?