新人SEの学習記録

14年度入社SEの学習記録用に始めたブログです。気づけば社会人3年目に突入。

学習記録:.NET

[学習記録] .NET

内容

第2章:One ASP.NET
  • 概要
    • ASP.NET:サーバサイドアプリを開発するためのフレームワーク
      • Visual Studio(VS)と連携して動的なWebサイトや小規模〜大規模なページ・アプリまで対応
    • 本章ではASP.NETを構成するサブフレームワークを概観すると共に、下記に言及
      • 関連するクライアントサイド(JavaScript)技術
      • Single Page Applicationプロジェクトなど
  • ASP.NET 概観、サブフレームワークについて
    • 1)Webフォーム
      • 一番の古参
      • サーバコントロールと呼ばれるUI部品が数多く提供
      • イベントドリブンモデルを採用、WIndowsアプリ開発と同じ要領でWebアプリを開発できる
      • 後述する理由で、現在では積極的に利用すべきフレームワークではなくなりつつある
      • 現在はASP.NET MVCを利用するのが望ましい
    • 2)ASP.NET MVC
    • 3)ASP.NET Webページ
      • ASPPHPに良く似た技術
      • HTMLにHello, @name!のように@〜の形式でコードを埋め込む
    • 4)ASP.NET Web API/SignalR
      • アプリ間の連携を目的としたサービス開発のためのフレームワーク(4章、5章)
  • ASP.NET MVCが生まれた経緯、それまでのWebフォームに顕在しだした問題点
    • 1)単体テストを自動化しにくい
    • 2)出力を制御しにくい
      • 出力の大部分がサーバコントロールによってブラックボックス
      • 開発者が細かな出力を制御しにくい
      • サーバコントロールにより自動出力されるHTMLは、お世辞にも美しいとはいえない
      • 近年のWeb開発におけるトレンドに反する(CSSによるデザイン、Javascript
    • 3)非.NET開発者になじみにくい
      • 非.NET開発者にとっては、コントロールやイベントドリブンは一種特異な世界
    • 上記のような問題を受け、ASP.NET MVCが登場
  • VS2013を用いたASP.NETアプリ開発の基本
    • 「新しいプロジェクト」>「Web」で選べるのはASP.NET Webアプリケーション」テンプレートのみ
    • 続いてサブフレームワークを選択
テンプレート 概要
Empty 空のテンプレート
Web Forms Webフォームアプリ
MVC ASP.NET MVCアプリ
Web API RESTfulなHTTPサービス
Single Page Application Web APIを利用してJavaScript駆動型のHTML5アプリを開発
Facebook Facebookアプリ
Windows Azure Mobile Service Azureモバイルサービスをベースとしたモバイル向けバックエンド
    • 単体テストの追加」をオンにすることでテストプロジェクトも同時に作成可能
フォルダー名 内容
Contorollers クライアントからの要求を処理
Models ビジネスロジック
Views ページレイアウト
Scripts JavaScriptライブラリ
Content CSSや画像リソースなど
App_Data データベースなど
App_Start 初期化ファイル
  • MVCの実装(ざっくりとのみ)
    • コントローラクラス
      • アクションメソッドを記述
      • 既定では/コントローラ名/アクション名のURLに紐づけられる
      • アクションでの仕事はリクエスト情報の取得やモデルの呼び出し、結果のビューへの反映など
      • 基本はビューに引き渡すビュー変数を設定し、戻り値としてActionResultオブジェクトを返す
    • ビュースクリプトの実装(Razor)
      • Viewsフォルダ以下に、コントローラ名/アクション名.cshtmlという名前で用意
      • 基本はRazor文法で記述、「@expression」の形式で値を埋め込む
      • 終了のデリミタは存在しない(自動的に終端と見なす、ただし複数行にまたがる場合は@{}で囲む)
      • ヘッダやフッタなどはViews/Shared/_Layout.cshtmlに定義
    • データモデルの受け渡し
      • Entity FrameworkやLINQを利用すればよい、ASP.NET MVCの本質はConrollerとView
      • データモデルとDBの橋渡しとして、Tableに対応するデータモデルクラスを作成
  • Data Annotationによる検証機能の実装
    • モデルクラスに対して検証ルールを宣言的に付与
    • Required, Range, Compare, RegExpなど、検証コントロール的なことができる
public class Book
{
    [DisplayName("ISBN")]
    [Required(ErrorMassage = "{0}が入力されていません"]
    [RegularExpression("^[0-9]{3}-[0-9]{1}-[0-9]{2,6}-[0-9]{2,6}-[0-9X]{1}$",
        ErrorMassge = "{0}は正しい形式ではありません。"]
    public string Isbn { get; set; }
}
  • ルーティング
    • リクエストURLに応じて処理の委譲先を決定
    • RouteCollectionオブジェクトのMapRouteメソッドを利用
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { conrtoller = "Home", action = "Index", 
                                    id = UrlParameter.Optional }
    }
}