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、またはより良い方法はありますか?
アップデート:
リポジトリでフィルタリングするという提案されたアイデアを試しましたが、問題は、アプリケーションが (サブドメインを介して) テナント コンテキストを提供し、サービス レイヤーとのみ対話することです。リポジトリ層までコンテキストを渡すのが使命です。
代わりに、サービス層でデータをフィルタリングすることにしました。リポジトリは、サービス レイヤーで使用されるテナント固有のデータを取得するための適切なフィルターを使用して、リポジトリで物理的に利用可能なすべてのデータを表す必要があると思います。
最終更新:
不必要な複雑さのため、私はこのアプローチを断念しました。以下の私の答えを見てください。