web-dev-qa-db-ja.com

ASP.NET MVC 3アプリケーションをどのように整理しますか?

ASP.NET MVC 3で拡張可能なアプリケーションプラットフォームを開発するのに苦労していることの1つは、すべてを簡単に更新および配布できる形式にモジュール化する方法です。

理想的な解決策は、すべてをZip/rar/tarなどの圧縮ファイル(ただし、ソースコードとビューがdllファイルにコンパイルされている)で圧縮し、コアプラットフォームにビルドして、非技術者は、圧縮ファイルを選択して自動的にインストールします。

個別の.dllファイルでコンパイルできる唯一のことは、コントローラー、クラス、およびかみそりビューです( ブログ投稿の助けを借りて )。これでこれに関するこの問題は、.dllプロジェクトがメインプロジェクトから共有ビューにアクセスできない(またはアクセスしたいファイルが見つからない)ことと、メインプロジェクトから共有ビューをにコピーする必要があることです各モジュールを保持するすべての個別のプロジェクト(コピーする必要がある構成ファイルは言うまでもありません)。

他のモジュールが使用している(他の人が維持している)共有ビューに変更を加えた場合、新しいバージョンの共有ビューにコピーするようにモジュールを更新する必要があり、これは単なる解決策ではないようです非常に扱いやすい。

他の人々が大規模で拡張可能なC#ASP.NET MVC 3アプリケーションをどのようにセットアップするかを確認しようとしています。

EDIT-新しい理想的なソリューション

私の最初の理想的な解決策は間違っていました。 Tunganoが指摘したように、私の最初の理想的な解決策は、サーバー/ブラウザーがcss、javascript、画像などで実行できるすべてのタイプのキャッシングを殺すことです。

私の新しい理想的なソリューションは、圧縮ファイル全体のインストールのアイデアです。コンパイルされたdllをソースコードと一緒にコンパイルし、圧縮ファイル内のすべての個別のcss、javascript、画像などのファイルを表示できます。次に、アプリケーション自体を通じて圧縮ファイルを選択すると、アプリケーションはすべてのファイルを正しい場所に配置します。このタイプの機能を作成する方法に関するリンクがあればすばらしいでしょう。

10
ryanzec

DLLからのjs、cssおよびその他の静的なものを提供することは、サイトに大量のトラフィックがある場合にパフォーマンスの低下を要求します。通常のMVCプロジェクトではIIS =クライアントとサーバーの両方でキャッシュをより効率的に使用できるようにそれらを処理します。

すべてをdllにラップする主な理由は、純粋にデプロイメントを快適にするためです。 dllは、imhoのパッケージ化の貧弱な形式にすぎません。ファイルを解凍することと単一のdllをコピーすることの違いは非常に小さいので、開発プロセスを複雑にすることには十分な価値がありません。

私は通常、MVCアプリを拡張機能自体として見ており、拡張可能にする必要があるものではありません。 MVCアプリケーションは、主に構成、接着剤、およびアプリケーション層です。私のコードの大部分は、ドメインモデルアセンブリに分離されています。

新しいソリューションに追加:

小さな独立したサービスアプリケーションによって更新を行わせると、おそらく自分で簡単になります。そうすれば、更新の問題が少なくなり、更新サービス自体が存在するアセンブリにヒットする可能性があります。

おそらく、小さな仮想アプリケーションで十分です。これにより、小規模なWebファームシナリオへの対応や一時的な "サイトが更新中"の通知の配置などが容易になる場合もあります。切り替え時に以前のバージョンのサイトをそのままにしておくと、ロールバックもおそらく簡単になります。

Visual Studioプロジェクトには、開始に役立つ可能性のあるいくつかのパッケージ化オプションと配置オプションがあります。基本的には、メタデータが追加されたZipファイルです。それらを使用して、WebサーバーにインストールできるWeb配置エンジンを使用してアプリを配置できます(これにより、このサービスを自分で作成する必要がなくなります)。

(まだWebデプロイの経験がないので、それ以上は説明できません)

10
Joppe

最も簡単な展開は、Webサイトの場所をZip形式で圧縮し、サポートしている各バージョンのIIS)で仮想ディレクトリをそれにマップする方法について指示を与えることです。元のソフトウェアに更新をコピーする前に、フォルダをコピーすることにより、ソフトウェアに現在のインストール場所をバックアップさせます。これにより、問題が発生した場合に、以前のバージョンにロールバックできます。簡単に動作します。より高度な顧客が特定の方法で物事を行うことを強制しないでください。

ユーザーがWebサイトをインストールまたは更新するとき、Webサイトを実行しているときに、Webサーバーの起動や停止などの指示に従う方法をユーザーに知ってもらうことは、不当な要求ではありません。ソフトウェアのメンテナンスにかかる時間を大幅に節約できます。指示が適切であれば、サポートコールをあまり受けることはありません。基本的な仮想ディレクトリとファイルのツリーのみを扱い、一部のカスタムインストールは扱っていないため、サポートコールを受けても、問題の修正は迅速かつ予測可能です。

更新:

アプリケーション内からZipファイルをアップロードするために必要な実行権限を持つディレクトリに書き込み権限を付与することは、セキュリティ侵害が発生するのを待っています。

ある種のパッケージ化されたソリューションがある場合(特にそれがWebアプリケーションを介してインストールされた場合)、トラブルシューティングするためのさまざまなシナリオ(権限、ファイアウォール、インストールプロセスのバグなど)がたくさんあります。

1
Charles Lambert