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