ASP.NET MVCを使用して、世界のさまざまな地域の複数の市場をサポートする単一のグローバルeコマースアプリケーションを作成するとします。
アプリケーションのビジネスロジックのほとんどはさまざまな市場で再利用できますが、一部の市場では、呼び出されたコントローラーアクションに応じて、独自のビューとクライアント側の検証ロジックを実装したいと考えています。コントローラーロジックは同じままで、特定の市場のニーズに応じてビューのみを変更する必要があります。これらは、使用するビューを提供します。
つまり、MVCをこれらの状況に拡張できる方法を提供する必要があります。
これを最適に処理する方法について、誰もがどのような推奨事項を提供できますか?
このコンテキスト内でのMVCコントローラー/ビューの拡張性に関するベストプラクティスは何ですか?
それとも全体的に悪い考えですか?
残りのMVCコードベースを壊すリスクを減らすクリーンなものを望んでいます。
待ってください、彼らは「独自の[...]クライアント側の検証ロジックを実装したい」のですが、サーバー側の検証ロジックは望んでいませんか?これは、セキュリティ面で重要な問題のように聞こえます。
同様に、サードパーティによって作成された一連のビューをサーバー上で実行することは問題外です。これらのビューには有害なコードが含まれている可能性があるためです。
ここで、顧客にアプリケーションを拡張させる必要がある場合は、プラグインアーキテクチャが必要です。 1つの方法は、 [〜#〜] mef [〜#〜] を使用することです。もう1つの方法は、 AppDomain
sを使用して独自の実装を作成することです。
そのような拡張性の例を見つけることができます ここ 。注:コードは私が作成し、MITライセンスでカバーされています。
どちらの場合も、カスタム作成されたコードに付与するアクセス許可には十分注意する必要があります。サードパーティによって作成され、サーバー上で実行されるため、コードからアクセスできるものとアクセスできないものを正しく理解する(そして慎重にテストする)ようにしてください。
サーバー側のビューを完全に破棄し、サーバー側にデータ(JSON、XML、便利なものは何でも、HTMLは提供しない)のみを配信させる。クライアント側は純粋なHTMLとJavascriptになります。これにより、クライアントはサーバー側のコードを必要とせずに、好きな方法でデータを表示できます。
ただし、このステートメントは面倒です。
独自の...クライアント側の検証
クライアント側の検証は、ユーザーの便宜のためです。検証はサーバー側で行う必要があります。 1つのアプローチは、実行時に解釈できる小さな言語で検証を指定できるようにすることです。たとえば、検証は、クライアント側からの各値の正規表現に制限できます。もう1つの可能性は、サンドボックスでコードを実行して、提供されたデータに対してのみコードを操作できるようにすることです。