在基于 Rob Conery 的 MVC Storefront 的多租户 ASP.NET MVC 应用程序中,我应该过滤存储库或服务层中的租户数据吗?
1. 过滤仓库中租户的数据:
public interface IJobRepository
{
IQueryable<Job> GetJobs(short tenantId);
}
2.让服务按租户过滤存储库数据:
public interface IJobService
{
IList<Job> GetJobs(short tenantId);
}
我的直觉是在服务层(选项 2)中执行此操作,但可以说每个租户本质上都应该拥有自己的“虚拟存储库”(选项 1),而这个责任在于存储库。
- 哪种方法最优雅:选项 1、选项 2 还是有更好的方法?
更新:
我尝试了在存储库中过滤的建议想法,但问题是我的应用程序提供了租户上下文(通过子域)并且只与服务层交互。将上下文一直传递到存储库层是一项任务。
因此,我选择在服务层过滤我的数据。我认为存储库应该代表存储库中物理可用的所有数据,并使用适当的过滤器来检索特定于租户的数据,以供服务层使用。
最终更新:
由于不必要的复杂性,我最终放弃了这种方法。请看下面我的回答。