共通の機能セット (および対応する URL、ルート、コントローラー、アクション、およびビュー) を持つ約 10 の ASP.NET MVC サイトを構築しています。また、これらのサイトはすべて、ドメイン オブジェクト (ユーザー、会社など) の基本セットと、それらのオブジェクトの基本属性 (名前、住所など) を共有します。
しかし、各サイトも高度にカスタマイズされ、ベースから拡張されます。たとえば、大規模な上場企業向けのサイトには、Company ドメイン オブジェクトに「子会社」および「株式シンボル」フィールドがあり、新興企業向けのサイトには「ベンチャー企業」および「資金調達」属性があります。ルック アンド フィールも大幅に異なりますが、HTML は可能な限り一貫性を保つように努めています (追加のドメイン オブジェクト属性用に追加のフォーム フィールドをモジュロ化するなど)。また、画像を控えめにオーバーライドすることで、たとえば、サイト間で同じボタン グラフィックを再利用できるようにします。
とにかく、アプリごとの属性を追加したり、アプリ間で UI を変更したりする自由を制限することなく、できるだけ多くのコードとできるだけ多くのテストを再利用できるように、要素を分解して設計する最善の方法を見つけようとしています。
私は、UI が少し異なり、データ モデルが多かれ少なかれ、StackOverflow/SuperUser/ServerFault (または MSDN/TechNet) に見られるような、カスタマイズが制限されたマルチテナンシーを処理する方法に精通しています。同一。しかし、モデルと UI が大きく異なる (ただし、共通のベースから継承している) 場合、どのように進めればよいかわかりません。
おそらく、各サイトを別々のアプリドメインで実行し、別々のデータベースでホストすることになるため、運用上の問題についてはあまり心配していません. 長期的なコード メンテナンス コストの削減、アジリティの向上 (派生アプリを壊すことなく新しい機能をベースに簡単に追加できるなど)、そして 2 番目のコードを構築する際の短期的な開発/テスト コスト削減の実現について心配しています。 3 番目、4 番目などのサイト。
高レベルのガイダンスと提案の両方を探していますが、最新の ASP.NET MVC プラクティスを使用してそのガイダンスを実現する方法についての具体的な提案も求めています。
これは非常に一般的な質問であることは承知していますが、まず、高レベルのガイダンスと、ASP.NET MVC でそのガイダンスを適用する方法に関する具体的なヒントとコツの両方を探しています。たとえば、次のようなものがあります。
- Visual Studio プロジェクト間でベース/派生を分割する推奨事項
- フォークを回避するためのソース管理のヒント
- データベース スキーマのヒント (FWIW、私たちのデータベースはすべて小さいです。テーブルごとに 10,000 行未満なので、DB のパフォーマンスよりも開発/テストのコストの方が問題です)
- コントローラー/ビュー/などの再利用に関するヒント。「基本」モデル属性に対応します。特に、基本属性と派生属性が混在する「新規顧客」フォームなどの UI を再利用します。
このようなマルチテナント アプリを設計する方法について、誰か良いアドバイスはありますか?