В мультитенантном приложении ASP.NET MVC, основанном на витрине MVC Роба Конери, следует ли фильтровать данные арендатора в хранилище или сервис слой?
1. Фильтровать данные клиента в хранилище:
public interface IJobRepository
{
IQueryable<Job> GetJobs(short tenantId);
}
2. Позвольте сервису отфильтровать данные репозитория по клиенту:
public interface IJobService
{
IList<Job> GetJobs(short tenantId);
}
Мое чутье говорит сделать это на уровне обслуживания (вариант 2), но можно утверждать, что каждый арендатор по сути должен иметь свой собственный "виртуальный репозиторий" (вариант 1), где эта ответственность лежит на хранилище.
- Какой самый элегантный подход: вариант 1, вариант 2 или есть лучший способ?
Обновление:
Я попробовал предложенную идею фильтрации в репозитории, но проблема в том, что мое приложение предоставляет контекст арендатора (через поддомен) и взаимодействует только с сервисным уровнем. Передача контекста до уровня хранилища - это миссия.
Поэтому вместо этого я решил отфильтровать свои данные на уровне обслуживания . Мне кажется, что хранилище должно представлять все физически доступные в хранилище данные с соответствующими фильтрами для извлечения специфичных для арендатора данных, которые будут использоваться сервисным уровнем.
Окончательное обновление:
В итоге я отказался от этого подхода из-за ненужных сложностей. Смотрите мой ответ ниже.