20141017 introduce razor
-
Upload
doaki -
Category
Technology
-
view
374 -
download
0
description
Transcript of 20141017 introduce razor
Introduce Razor
2014/10/17 Template Engine Night
do_aki
@do_aki
@ do_aki
http://do-aki.net/2
I PHP
Razor は ASP.NET の一部
• 正式には Razor view engine
• Razor 構文• Web に特化したテン
プレートエンジン• コードを埋め込める
(C# / VB)
http://msdn.microsoft.com/ja-jp/magazine/gg983489.aspx
<% ~ %><%= ~ %>
<% ~ %><%= ~ %>
Razor Syntax
Example
@{ var label = “<label>”;var value = 999;
}<h1>@label</h1><p>value is @(value+1).</p>
<h1><label></h1> <p>value is 1000.</p>
if
@{var now = DateTime.Now;
}今日は @now.ToShortDateString() です。@* 時刻によって挨拶切り替える *@@if (now.Hour < 12) { <p> おはよう </p>} else if (21 <= now.Hour) { <text> おやすみ </text>}今日は 2014-10-17 です。( 時刻によっては “ <p> おはよう </p>” もしくは “おやすみ” も表示される )
foreach
@{var ary = new int[] { 1, 1, 2, 9 };
}
@foreach (var val in ary) {if (0 < val) {
<text>value is @val</text>}
}
Layout
header@RenderBodyfooter
@{Layout = “layout”;
}body
layout.cshtml
body.cshtml
headerbodyfooter
どうやって使う?
• VisualStudio (Express 2003 for Web)– http://www.visualstudio.com/–「新しい Web サイト」 (ASP.NET Web サイ
ト ) でさくっと試せる。
• WebMatrix– http://www.microsoft.com/web/webmatrix/–使ったことない– Wordpress を簡単に動かせるとからしい
当然 Windows
当然 ASP.NET
ASP.NET なんて使わねーよ><という人には
RazorEngine
RazorEngine works in .NET app
var tpl = "My Name is @Model.Name !";var model = new { Name = "do_aki" };MessageBox.Show(
RazorEngine.Razor.Parse(tpl, model));
WinForms okWPF okConsole ok
Nuget でさくっと入るので便利https://www.nuget.org/packages/RazorEngine/
layout in RazorEnginevar layout = @"header@RenderBody()footer";RazorEngine.Razor.Compile(layout, "mylayout");
var body = @"@{ Layout = ""mylayout"";}body";var compiled = RazorEngine.Razor.Parse(body, model);
実装とか
Source code 公開されてる
• Razor view engine– http://aspnetwebstack.codeplex.com/– Apache License 2.0
• RazorEngine– https://github.com/Antaris/RazorEngine– Microsoft Public License
Code Reading!
C# 力が足りない
先人の知恵を借りた
Template life cycle
1. コード部とマークアップ部に分解しつつ構文木を構築
2. コード部はそのまま、マークアップ部は Write メソッド呼び出し等に変換して .NET のコード ( 正確には CodeCompileUnit ) を生成 ( これが実行可能な class となる )
3. 2. の インスタンスを作成し、適宜プロパティを設定して実行する
コード部とマークアップ部に分離
@{var now = DateTime.Now;
}今日は @now.ToShortDateString() です。@* 時刻によって挨拶切り替える *@@if (now.Hour < 12) { <p> おはよう </p>} else if (21 <= now.Hour) { <text> おやすみ </text>}
@{var now = DateTime.Now;
}今日は @now.ToShortDateString() です。@* 時刻によって挨拶切り替える *@@if (now.Hour < 12) { <p> おはよう </p>} else if (21 <= now.Hour) { <text> おやすみ </text>}
@{var now = DateTime.Now;
}今日は @now.ToShortDateString() です。@* 時刻によって挨拶切り替える *@@if (now.Hour < 12) { <p> おはよう </p>} else if (21 <= now.Hour) { <text> おやすみ </text>}
code
m m
markup
m
code
code
code
c
コード部とマークアップ部に分離
class を構築 ( 実際には CodeDom.CodeCompileUnit)
public class __CompiledTemplate {
public void Execute() {var now = DateTime.Now;WriteLiteral(“ 今日は “ );Write(now.ToShortDateString());WriteLiteral (” です。 \r\n”);if (now.Hour < 12) {WriteLiteral(“<p> おはよう </p>”)} else if (21 <= now.Hour) { WriteLiteral(“ おやすみ” )}
}}
実行
• あとはインスタンス生成してプロパティ割り当てて実行するだけ。
• 実行には Razor 関わってない• .NET の VM に載る感じ• 速いんじゃないかな
まとめ
• ASP.NET の Template Engine であるところの Razor を紹介しました
• RazorEngine を使えば .NET アプリケーションでも簡単に利用できます
• CodeDom 面白そう
ちなみに、 yii (PHP) で Razor 構文っぽいノを使えるものある
らしい
• yii-razor-view-render• https
://code.google.com/p/yii-razor-view-render/
いじょー
2014/10/17 Template Engine Night
do_aki