В настоящее время мы используем Entity Framework в качестве ORM для нескольких веб-приложений, и до сих пор она подходила нам, поскольку все наши данные хранятся в одной базе данных. Мы используем шаблон репозитория, и у нас есть службы (уровень домена), которые используют их и возвращают сущности EF непосредственно в контроллеры ASP.NET MVC.
Однако возникло требование использовать сторонний API (через веб-сервис), который даст нам дополнительную информацию, касающуюся пользователя в нашей базе данных. В нашей локальной базе данных пользователей мы будем хранить внешний идентификатор, который мы можем предоставить API для получения дополнительной информации. Доступно довольно мало информации, но для простоты один из них относится к компании пользователя (имя, менеджер, номер, должность, местоположение и т. Д.). Эта информация будет использоваться в разных местах наших веб-приложений, а не в одном месте.
Поэтому мой вопрос: где лучше всего заполнить эту информацию и получить к ней доступ? Так как он используется в разных местах, на самом деле нецелесообразно извлекать его на разовой основе, где бы мы ни использовались в веб-приложении, - поэтому имеет смысл возвращать эти дополнительные данные со слоя домена.
Сначала я хотел создать класс модели-оболочки, который будет содержать сущность EF (EFUser) и новый класс «ApiUser», содержащий новую информацию - и когда мы получим пользователя, мы получим EFUser, а затем получим дополнительный информация из API и заполнить объект ApiUser. Однако, хотя это было бы хорошо для получения отдельных пользователей, оно падает при получении нескольких пользователей. Мы не можем использовать API при получении списка пользователей.
Моей второй мыслью было просто добавить одноэлементный метод к сущности EFUser, который возвращает ApiUser, и просто заполнить его при необходимости. Это решает вышеуказанную проблему, поскольку мы получаем к ней доступ только тогда, когда она нам нужна.
Или последняя мысль заключалась в том, чтобы сохранить локальную копию данных в нашей базе данных и синхронизировать ее с API, когда пользователь входит в систему. Это минимальная работа, так как это всего лишь процесс синхронизации - и у нас нет накладных расходов на попадание БД и API каждый раз, когда мы хотим получить информацию о пользователе. Однако это означает хранение данных в двух местах, а также означает, что данные устарели для любого пользователя, который не вошел в систему в течение некоторого времени.
У кого-нибудь есть какие-либо советы или предложения о том, как лучше всего справиться с таким сценарием?
it's not really sensible to fetch it on an ad-hoc basis
-- Почему? По причинам производительности?