2017-03-31 8 views
0

は記事がそのまま維持されているデータベースとのシンプルなブログと仮定:特定であるために(:ようContentURLにあるファイルを読み込むを通じてビューで記事の内容を含めることをお勧めでしょうビュー内のファイルを読み込むのは悪い習慣ですか?

CREATE TABLE [Articles](
    [ArticleId] INT IDENTITY(1,1) NOT NULL, 
    [ContentURL] NVARCHAR(250) NOT NULL 
    .... 
) 

を、)?

@model Articles 
... 
<div class="row"> 
    <div class="col-md-8 col-xs-12"> 
     @Html.Raw(File.ReadAllText(Model.ContentURL)) 
    </div> 
</div> 

をこの方法でファイルをキャッシュすることができますまたはコントローラでこれを行うとViewBag.RawContentとして渡す方が良いでしょうか? ([OutputCache]属性はファイルをメモリに保持するのに役立ちますか)

一方、NVARCHAR(MAX)を使用してデータベースに生のコンテンツを直接格納する方法は、これが最悪の方法かベストプラクティスですか?

+0

コントローラでファイルを読む方が良いでしょう。 – Amy

答えて

1

この質問に答えるとき、あなたはカップルの事を考える必要があります:

  • あなたはすべてのテキストを読むことができない場合はどうなりますか?
  • 情報はどのくらいの頻度で変更されますか?
  • 提案されたソリューションはどれくらい管理するのが難しいですか?

File.ReadAllText()は、ファイルが見つからない場合、またはロックされている場合、またはファイルへのアクセス権がもうなくなった場合に例外をスローすることがあります。 Viewに例外があると、ユーザーは醜いエラーページを取得することも知っています。どちらも望ましいことではありません。

は、Viewの悪い考えです。

例外が発生した場合は、回復する必要があります。

他のソリューションでは、最初の箇条書きの問題を処理することができます。これらはどちらも優れたソリューションですので、プロジェクトの答えは次の2つの箇条書きへの答えに大きく左右されます。

  • アプリをデプロイしてもファイルが変更されない場合は、ViewBag.RawContentのデータは完全に良好です。
  • 誰かが他のものを再デプロイせずにそのファイルを編集できる必要がある場合は、そのデータベースを使用することができます。
+0

しかし、いつでもコンテンツをファイルとして読み込んで変更することができます。再展開するとどういう意味ですか?問題が起こると思いますか? – Arrrr

+0

これは管理に関するものです。配備されたアプリケーションに関連付けられたユーザーアカウントによって書き込まれるファイルを制限することをお勧めします。開発マシン上で動作するものは、適切に管理されたサーバーでは動作しない可能性があります。したがって、ファイルが読み取り専用の場合は、ファイルを再デプロイして内容を変更する必要があります。問題については、この変更がどれくらいの頻度で起こると思われるかによって異なります。いつ問題になるのかの閾値はあなた次第です。 –

関連する問題