0

ASP .NET MVC 3のコンテキストでベストプラクティスに従っていることを確認したいと思います。MVC3Webアプリケーションで特定のアクションが実行されたときに、Razorテンプレートエンジンを使用して自動電子メールを生成しています。

電子メール用に別のクラスライブラリを作成しました。このクラスライブラリには、電子メールの生成時に使用されるモデルと、適切なビューとモデルを使用して必要なメッセージテキストを生成するメッセージファクトリが含まれます。

ビューテンプレートをどこに保存すればよいかわかりません。それらをCSHTMLとして保存したいと思います。これにより、プロジェクトの開発者(Razorを初めて使用する)がメールテンプレートの作成中にIntelliSenseを使用できるようになります。

デプロイメントがより複雑になるため、クラスライブラリのフォルダに保存することはできないと思います。それらをMVC3Webアプリケーションルート内のフォルダーに保存すると、正しいパスを知っているインターネット上の誰もがアクセスできるようになります。ここで、2つのオプションを検討します。

  1. それらをapp_dataフォルダーに保存しますが、これは乱雑に思えます。

  2. それらをMVCのViewsフォルダー内の「EmailTemplates」というフォルダーに保存します。直接参照することはできず(コントローラーなし)、開発者はそれらに簡単にアクセスしてIntelliSenseを利用できるため、これが最良のオプションだと思います。

オプション2が最良のオプションですか、これらのメールテンプレートをここに配置するのは罪ですか?次に、ローカルファイルシステムを介してファイルに直接アクセスしますが、本番環境にデプロイした後にセキュリティの問題が発生するかどうかはわかりません(おそらく、app_dataフォルダーを使用するとこれを防ぐことができます)。展開のための最小限の構成が欲しいのですが。

ありがとう!

4

2 に答える 2

2

いつものように、正しい答えは1つではなく、哲学とアプローチがすべてですが、(私の考えでは)最も重要なのはユーティリティです。IEが機能し、保守が簡単で、理解しやすい場合は、それを実行してみませんか?

私はあなたの立場で、それをApp_Dataフォルダーの下に置きます-これは定義上、アプリケーションが使用するすべてのデータが入る場所です。データベースがあり、構成XMLがあります。それでは、そのフォルダーを目的に使用してみませんか。

C#コード内から次のように簡単にアクセスできますSystem.Web.HttpContext.Current.Server.MapPath(@"~/App_Data")。他の(自分で作成した)フォルダが良くも悪くもなるとは思いません...そのApp_Dataだけがこれらの目的のために特別に存在しますが、それはあなたが他のことをできないという意味ではありません、それはあなたのアプリケーションで意味があります。

お役に立てれば。

于 2012-08-14T20:22:20.400 に答える
1

さらに調査と実験を行った後、Viewsフォルダは私のメールテンプレートに最適な場所のようです。これが私の推論です:

  • 電子メールテンプレートは、Webアプリケーションでのみ使用され、他には何も使用されません。

  • MVCアプリケーションが実行されるアプリケーションプールは、少なくともViewsフォルダー内のフォルダーを読み取るためのアクセス権を持ちます。これは、展開中にフォルダの特別な権限に対応する必要がないことを意味します。(これはApp_Dataフォルダーにも当てはまりますが)。

  • IntelliSenseは、App_Dataフォルダー内からは機能しませんが、Viewsフォルダー内では機能します。このプロジェクトの開発者はRazorを初めて使用するため、IntelliSenseを使用すると作業が簡単になります。また、テンプレートの開発が簡単になります。

  • テンプレートメーラー用に別のプロジェクトを作成しましたが、メールテンプレートのモデルをMVCモデルと一緒に保存することもできます。

于 2012-08-16T06:46:41.057 に答える