【asp.net】MVCフレームワーク


MVCフレームワークとは


MVCモードはソフトウェアアーキテクチャモードである.ソフトウェアシステムをモデル、ビュー、コントローラの3つの部分に分けます.MVCモードは、Trygve Reenskaugが1974年に提案したもので、1980年代にプログラム言語Smalltalkのために発明されたソフトウェア設計モデルである.MVCモードの目的は、後続のプログラムの修正と拡張を簡略化し、プログラムの一部の再利用を可能にする動的なプログラム設計を実現することである.それ以外に,このモードは複雑さの簡略化によりプログラム構造をより直感的にする.ソフトウェアシステムは、自身の基本部分を分離するとともに、各基本部分に機能を与える. 
 

フレームの内容


いくつかのファイル
      App_Data:データを格納します.
Content:アプリケーションに必要な静的リソースファイルを保存します.画像、CSSスタイルなど
Scripts:JSスクリプトの保存
Models:データ・アクセス操作に関するクラスおよびオブジェクトの定義を格納するモデル・コンポーネントを格納します.
Views:ビューファイルを保存します.
Shared:ビューの共通部分.このディレクトリは当コントローラではなく、すべてのコントローラに属し、マスターページ、CSSスタイルシートを保存できます.
コントローラ:コントローラを保存します.
Global.asax.cs:非常に重要なファイルで、デフォルトではURLアドレスコードとカスタム関連ルーティングロジックが生成されています.
コントローラ
ユーザから要求を受信し、モデルをビューと一致させてユーザの要求を共同で完了することが理解される.これは、どのようなモデルとビューがどのようなリクエストを完了できるかを選択する配布器です.制御層はデータ処理を行わない.例えば、ユーザーがリンクをクリックし、制御層が要求を受けた後、業務を処理しない.それはただモデルに情報を伝え、モデルに何をするかを教え、要求に合ったビューをユーザーに返すだけだ.
ビュー(View)
ユーザインタラクションを表すインタフェースであり,webアプリケーションではHTMLやaspxページとして理解できる.
モデル(Model)
ビジネス・プロセス/ステータスの処理およびビジネス・ルールの作成.業務プロセスの処理過程は他の層にとってブラックボックス操作であり,業務モデルの設計はMVCの最も主要な核心と言える.



MVCプログラムの実行手順


MVCの実行手順を例として説明する例を次に示す
1.RouteConfig.cs
public class RouteConfig
    {
        //         MVC     URL    
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            //      
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
           
        }
    }

ユーザーが要求を入力すると(ブラウザにアドレスを入力する)、この方法が実行されます.この方法の役割は、アドレスが合法かどうかを判断し、合法であれば対応するコントローラを実行し、合法でなければデフォルトのコントローラを実行することです.
メソッドボディではurlが正規表現であることがわかります.この正規表現は、ユーザーが入力したアドレスが合法であるかどうかを検証する一方で、ユーザーがどのコントローラのどの実行可能メソッドを要求するかを示し、{controller}はどのコントローラを実行するかを示し、{action}はどの実行可能メソッドを実行するかを示し、{id}は実行可能メソッドのパラメータです.
2、homeController.cs(コントローラ)
       //        (     )
        List<Models.dog> list = null;
       
      
        /// <summary>
        ///        
        /// </summary>
        public List<Models.dog> InitData()
        {
            list = new List<Models.dog>(){
        new dog(){ID=1,Name="  1"},
         new dog(){ID=2,Name="  2"},
          new dog(){ID=3,Name="  3"},
           new dog(){ID=4,Name="  4"},
        };
            return list;
        } 
     
        //Action  
        public ActionResult Index()
        {

            
            
            //1.    
            List<Models.dog> list = InitData();
            
            
            //2.    ,  Html     sbHtml
            System.Text.StringBuilder sbHtml = new System.Text.StringBuilder();

            list.ForEach(d =>
            {
                sbHtml.AppendLine("<div>" + d.ToString() + "</div>");
            });
            //viewbag   dynamic    ,                        
            ViewBag.Htmlstr = sbHtml.ToString();
            
            
            //3      
            return View();
        }
    }

コントローラがやっていることは、得られたデータをhtml形式の内容に変換することです.この例から、Action()メソッドは、まずデータソース内のデータを取得し、次にStringBuilderオブジェクトをインスタンス化することが分かる.得られたデータをhtml形式に変換してViewBagに保存した.次に、同じ名前のビューをロードします.
3.Index.cshtml(ビュー)
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
       @*     Action         ,      *@
       @*   Raw  html    *@
        @Html.Raw(ViewBag.Htmlstr)
    </div>
</body>
</html>

コードからビューはHTMLページであり、コントローラが生成したコンテンツに関するコードを読み取り、ユーザーに出力することができます.
Model
 public class dog
    {
        public int ID { get; set; }
        public String Name { get; set; }
        public override string ToString()
        {
            return "ID="+this.ID +"Name"+this.Name;
        }
    }

モデルレイヤは、3つのレイヤのエンティティレイヤとして理解できます.例ではdogエンティティが定義されていますが、このエンティティにメソッドが追加されています.
上記の例では、MVCフレームワークのプログラムがこのようなクラスを順次経験していることがわかります.
RouteConfig-->controllers--->view
このうち,RouteConfigは,ユーザが入力したアドレスが正当であるかどうかを判断する2つのことを行い,2ロードは対応するコントローラを実行する.
Controllersも私たちのために2つのことをしました.html形式2にデータを変換して、同じ名前のビューをロードします.
Viewが私たちのためにしてくれたことは、コンテンツをユーザーに出力することです.