2011-09-13 18 views
4

電子メールテンプレート用のRazorビューエンジンを使用している人がたくさんいます。一見、これは素晴らしいアイデアのようだ。しかし、ほとんどの人が生成している電子メールを見た後、単に文字列ベースの検索と置換を行うよりも、Razorの使用方法がどれほど優れているのか疑問に思っています。電子メールテンプレートのRazor vs. Find-and-Replace

ほとんどの電子メールのようなものの線に沿って落ちる:

string result = template.Replace("@Model.Name", Model.Name); 

私はさらにいくつかのウェブ検索が、この質問に答えることができたとします。ちょうどのような何かをしない理由は、このむしろ些細なメールで

<html> 
<head> 
    <title>Welcome to mysite.com</title> 
</head> 
<body> 
    <p>Dear @Model.Name,</p> 
    <p>An account has been created for you.</p> 
    <p>Your account is FREE and allows you to perform bla bla features.</p> 
    <p>To login and complete your profile, please go to:</p> 
    <p><a href="@Model.LogOnUrl">@Model.LogOnUrl</a></p> 
    <p>Your User ID is your email address and password is: @Model.Password</p> 
</body> 
</html> 

しかし、私はまだ確かな答えを見つけていない。それは厳密にパフォーマンスの問題ですか?または、これらの簡単な電子メールがRazorビューエンジンを使用することの本当の利点を実証していないことだけですか?

私の質問は、この種のソリューションを実装する方法とは関係がありません。私はそれを行う方法を理解しています。私の質問は、あなたの電子メールがとても基本的なときにかみそりを使用するオーバーヘッドの価値があるのですか?特に、RazorEngineを使用していて、文字列入力を受け取り、テンプレートのコンパイルされたクラスを生成しない場合は特にそうです。

これは、私には設計された解決策のような感じです。

+0

ダウン投票者に説明してください。 –

+0

私が言及すべきであるもう2つの事があります。まず、私はMVCの外でRazorを使用しています。第二に、今私は自分の電子メールテンプレート用にRazorを実装しています。私はfind-and-replaceが今までにない最高のアイデアだと提案しようとしているわけではありません。 – mlindegarde

答えて

4

Razorを使用すると、後で電子メールシステムを完全に再設計する必要なく、より複雑な電子メールを作成できます。

たとえば、条件を含めることができます。

+0

私はこの点を見ることができ、おそらくRazorを使用することに最も有利です。検索と置換は、追加の開発なしで条件付きシナリオを処理することはできません。その時点で、ホイールを再発明しているだけです。 – mlindegarde

+0

剃刀はパフォーマンスも速いです! – VISHMAY

4

パフォーマンスとセマンティクスの問題です。もちろん、文字列置換を使用するだけでテンプレート電子メールを作成できますが、Razorはもともとその目的のために設計されています。

この例では、多くの文字列の置換が行われているため、メモリ内に多数の文字列が作成されます。メモリに保存するためにStringBuilderに切り替える場合でも、電子メール生成をサポートするコードを作成しています。

Razorを使用すると、モデルを提供し、実際のプレゼンテーションレイヤーをコード外に保つことができます。あなたのコードは、電子メールの詳細を収集し、それを別のコンポーネントに渡してテンプレートに渡すだけです。それはメンテナンスのための簡単な方法です。

RazorEngineは、指示があればコンパイル済みのクラスを出力します。その意味で、そのクラスはテンプレート化のための驚異的なパフォーマンスでキャッシュされ、呼び出されることができます。

私の意見では、WebFormsからMVCへの切り替えと同じです。あなたの懸念を分け、それぞれが自分たちの役割を果たすようにします。

+0

私はあなたの記憶上の懸念を見つけて交換します。私はあなたがそこに行くヒットを疑うことはありません。しかし、あなたの懸念の議論は、Razorにfind-and-replaceより優れた利点を与えるものではありません。テンプレートを作成するために使用される実際のコードは、使用する方法に関係なく、分離することができます。 – mlindegarde

+0

正しい。しかし、今では、Razorがテンプレートからあなたのためにそれを生成するのではなく、そのコードを書いています。市場投入までの時間の面で、Razorは手を下ろします。 – Tejs

+0

私はRazorがMVCの外で使用されているケースを検討していると言いたいはずです。このような場合、私はMVCの外でRazorを使用したり、検索と置換を行うための追加コードを使用するための追加コードを書く必要があります。いずれにしても、追加コードが必要です。いずれのケースでもかなりの量の開発が行われるため、私はトスアップを市場投入する時間を考慮しています。 – mlindegarde

関連する問題