4

ソリューションで VS2010 プロジェクトとして存在する ASP.NET MVC サイトを作成する方法を理解しようとしています。次に、複数の「テナント」に対して、そのサイトを継承するサイトを作成します。これにより、モジュラー機能を別の機能に影響を与えることなく 1 つに追加する柔軟性が得られ、両方ともコア ライブラリの最適化の恩恵を受けることができます。

それはクレイジーなアイデアですか?そのようなことにはどのようなパターンがありますか?Webフォームベースのサイト(DLLをプラグインとして追加)で同様のことを行いましたが、MVCでは行いませんでした.

「テナント」はビジネス クライアントです。それぞれに独自の MSSQL データベースがあり、それらの周りに個別の処理があり、各クライアントは独自のサイロにあります。データベースは似ていますが、あちこちにいくつかの機能が追加されています。バージョン管理され、個別に展開されているため、プロセス全体がうまく機能します。クライアントは n 回ログオンしています。テナントに機能を与えるために使用できる単一の「ベース サイト」を開発したいと考えています。すべてのアクティビティは、テナントの単一のデータベースに分離されています。厄介なのは、他のテナントのサイト エクスペリエンスを台無しにすることなく、1 つのテナント サイトに新しいコンポーネント (フォーラムなど) を追加する方法です。

すべてのアイデアに感謝します。ありがとう。

4

1 に答える 1

0

マルチテナント Web アプリケーションの開発に幅広く取り組んできました。始めるのに役立つ 3 つの基本的な指針を以下に示します。

安全

TenantId は、ログイン資格情報の一部です。これらは Thread.CurrentPrincipal に格納されます。これにより、各リクエスト (スレッド) が特定のユーザー、つまりテナントに効果的にバインドされます。Thread.CurrentPrincipal は、任意のコードから簡単にアクセスできます。

データベース

すべてのデータを格納するために単一のデータベースを使用しました。1 つのテナント (マルチテナント) に固有のテーブル (エンティティ) とそうでないテーブル (クロステナント) が分離されました。マルチテナントのテーブルには、「TenantId」という列がありました。エンティティ モデルでは、これらのエンティティが特別な IMultiTenant インターフェイスから継承されていることを確認しました。このインターフェイスには、TenantId フィールドに相当する C# が含まれていました。Entity Framework のアーキテクチャを拡張して、マルチテナント エンティティの TenantId に対する既定のフィルター処理を提供しました。これにより、あるテナントが別のテナントのデータにアクセスしたり変更したりできないことが保証されました。

プラグイン

テナント固有のコードの実装をサポートするために、少し依存性注入のトリックを使用しました。現在の TenantId に基づいて、DI コンテナーはそのインターフェイスのテナント固有の実装を挿入します。

于 2012-08-07T17:00:18.863 に答える