ASP.NET Core 2.0の変更点
続いて、ASP.NET Core 2.0から追加された機能について説明します。
Razor Pages
ASP.NET Core 2.0から新たなコーディング手法/概念として、Razor Pagesが導入されました。Razor Pagesではビューとビューに関連するプロパティや機能を保持するオブジェクト(PageModel)の対によって画面の開発を行うことで、ASP.NET MVCとは異なる開発スタイルでWebアプリケーションを作成することができます。
ページと関連オブジェクトを対に定義していくため、いわゆるMVVM(Model-View-ViewModel)デザインパターンをASP.NETに導入したものと捉えることができます。
図2は、ASP.NET Core MVCとのアーキテクチャの違いを表したものです。ASP.NET Core MVC(図上)ではユーザーからのリクエストの受け取り、対応するモデルでのビジネスロジックの実行、ビューの作成とレスポンスなどをコントローラーが中心となって行うMVCデザインパターンを採用しています。一方Razor Pages(図下)では、リクエストは直接ビューが受け取り、ビューに対応したビューモデルを経由してビジネスロジックを実行し、またビューモデルを経由してビューにデータを埋め込んでいくMVVMデザインパターンを採用しています。
ASP.NET Core 2.0のアナウンスの中で、Razor Pagesについて「ページ(画面)を中心としたシナリオにおいて、MVCパターンに比べてシンプルかつ簡単に記述できる」と述べられています。今後のASP.NET Coreにおける画面を伴うアプリケーションでは、Razor PagesとASP.NET Core MVCから利用用途にあったフレームワークを選択して開発を行うことができるようになります。
リスト1は、Razor Pagesを使ったビューと関連オブジェクト(PageModesオブジェクトと呼びます)のコード例です。
ビューでは、コードの先頭で「@page」というRazor Pagesのビューであることを表すディレクティブを使い、Razor Pagesであることを宣言します。@modelディレクティブは、このビューが参照することのできるモデルオブジェクトを宣言するもので、ASP.NET MVCに従来より備わっているものです。ここでは、pタグの部分でモデルが持つ現在時刻(NowDate)の値を参照するのに利用しています。
@page
@model sample.Pages.IndexModel
<html>
<body>
<h2>Now Time is: </h2>
<p>@Model.NowDate</p>
</body>
</html>
このRazor Pagesビューにひも付くPageModelオブジェクトはリスト2の通りです。「PageModel」クラスを継承したクラスとして作成します。
namespace sample.Pages
{
public class IndexModel : PageModel
{
public DateTime NowDate { get; set; }
public void OnGet()
{
NowDate = DateTime.Now;
}
}
}
プロパティである「NowDate」が、ビューが参照しようとしていたものです。「OnGet」メソッドは、Razor PagesのビューにHTTPのGETリクエストがあった場合に実行されるメソッドです。この例では単純に現在時刻を取得してNowDateプロパティに値をセットしています。これによってビューに定義した「@Model.NowDate」の値が置き換わり、現在時刻が画面に表示されるようになります。
このようにRazor Pagesを使った実装では、ビューとPageModelオブジェクトの組み合わせでWebアプリケーションを作成することができます。
詳しいRazor Pagesでの実装方法やASP.NET MVCとの比較などについては、連載の第2回で説明する予定です。
SPAテンプレートの追加
ASP.NET Core 2.0では、Webアプリケーション用のプロジェクトテンプレートとして、従来よりあるMVCと前述したRazor Pagesに加え、SPA(Single Page Applications)用のテンプレートも追加されました。SPAはHTML5やCSS3、JavaScriptフレームワーク等を組み合わせたリッチクライアントの開発手法であり、フロントエンド開発の場で採用しているプロジェクトも増えていることと思います。ASP.NET Core 2.0では、これらSPAのランタイムであるNode.jsを組み込んでおり、.NETのビルドプロセスの一環としてJavaScriptのコンパイルをサーバーサイドのタスクとして行います。
現在は「Angular」「React.js」「React.jsとRedux」の3パターンからSPAテンプレートを選択することができます。SPAテンプレートを使ったアプリケーション開発については、第3回で説明する予定です。
Entity Framework Core 2.0
.NET Core 2.0、ASP.NET Core 2.0のバージョンアップに合わせ、Entity Framework Coreも2.0へとバージョンアップしました。Entity Frameworkは.NET FrameworkにおけるO/Rマッパーであり、Entity Framework Coreはそのクロスプットフォーム版ということで、位置づけとしてはASP.NET Coreと非常に似ています。
- .NET Standard 2.0に対応
- SQLに変換可能なLINQクエリの向上
- グローバルなクエリフィルタ
- DbContextのプーリングに対応
Entity Framework Core 2.0を使用したDBアクセスをする、ASP.NET Core 2.0のアプリケーション開発については、第4回で説明する予定です。
「.NET Standard 2.0」について
.NET Standardは.NET Framework、.NET Core、また2016年にMicrosoftが買収したXamarinといったアプリケーション基盤の下部レイヤーにあたる基本ライブラリを、ひとつのライブラリへ統一しようとするプロジェクトです。これまで別々の基本ライブラリを使用していた部分を.NET Standardに置き換えることで、どのアプリケーション基盤上で実装したコードであっても異なるアプリケーション基盤で動かせるようになり、コードの再利用性を高めることができます。
.NET Standard 2.0は、ASP.NET Core 2.0、.NET Core 2.0、Entity Framework Core 2.0と同じタイミングで発表された.NET Standardの最新バージョンで、利用できるAPIの数が前バージョンより大幅に増加しています。
