ASP.NET MVCケースチュートリアル(ASP.NET MVC betaベース)——第1編:準備作業


要旨本文はこの文章シリーズの目的、形式及び大体の内容を簡単に紹介する.そしてこのシリーズの勉強を始める前に必要な準備を完了します.前言ASP.NET MVCはマイクロソフトの公式MVCソリューションとして、しばらく発売されています.自動発売以来、ずっと注目されていると言えます.長いPreviewを経て、先日ついにbeta版が発売されました.また、公式ドキュメントでは、マイクロソフトが最終的な公式版がbeta版に比べて大きく変化しないと発表しています.だから、そうです.NETプラットフォームの開発者にとって、ASPを学ぶ時だ.NET MVCです.このシリーズの文章はASPとしてNET MVCの入門チュートリアルでは、その概念や理論を長々と紹介しません.ケーススタディを通してASPを学ぶのですNET MVC.このシリーズでは、「公告発表システム」を徐々に完成させます.私の作文の策略は:まず手を出して、概念と理論を解釈する必要がある時に解釈して、先に概念と理論を解釈してからものをするのではありません.また、いくつか説明したいことがあります.皆さんの注目点をASPに集中させるためにNET MVCでは、このDemoの業務処理にMock方式を使用します.つまり、データベースに実際にアクセスするのではなく、データを仮想化します.      2.本Demoはいかなる美工問題も考慮しない.では、ASPを始めましょう.NET MVCの旅ですね.この編では、私たちはすべての準備を終えます.設定環境ASPをインストールしていない場合は、NET MVCの場合は、こちらでダウンロードしてインストールしてください.ダウンロード後、ヒントを押してインストールすればいいです.新規プロジェクトのインストールが完了するASP.NET MVCの後、VSにプロジェクトを新規作成すると、「ASP.NET MVC Webアプリケーション」のオプションが表示され、それを選択してプロジェクトを新規作成し、「MVCDemo」と名付けられます.プロジェクトを作成すると、デフォルトで多くのフォルダが作成されていることがわかります.ここでは、各フォルダの役割を簡単に説明します.Content-画像、CSSなど、アプリケーションに必要なリソースファイルを保存します.コントローラ-コントローラクラスを保存します.Models-ビジネスモデルコンポーネントを保存します.Scripts:JavaScriptスクリプトファイルを保存します.View-ビューを保存します.今はいくつかの概念を理解していなくても大丈夫で、後続の文章はゆっくり説明します.プロジェクトを新規作成した後、Mockビジネスモデルを構築する準備をします.これにより、これらの「詐欺」的なビジネスモデルを直接使用してビジネス処理を行い、すべての注目点をASPに置きます.NET MVCの勉強上.まずModelsの下にEntities、Interfaces、MockModelsという3つのフォルダを新規作成し、エンティティクラス、インタフェース、およびMockビジネスモデルを格納します.Entitiesには、CategoryInfoとAnnounceInfoの2つのクラスがあります.それぞれ、公告カテゴリと公告のエンティティクラスです.具体的なコードは次の通りです.CategoryInfo.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MVCDemo.Models.Entities
{
    /// <summary>
    ///      
    /// </summary>
    public class CategoryInfo
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
}

AnnounceInfo.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MVCDemo.Models.Entities
{
    /// <summary>
    ///      
    /// </summary>
    public class AnnounceInfo
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        public int Category { get; set; }
    }
}

次に、公告カテゴリサービスと公告サービスが実現しなければならない2つのインタフェースを定義します.この2つのインタフェースはInterfacesの下に置かれています.
ICategoryService.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MVCDemo.Models.Entities;

namespace MVCDemo.Models.Interfaces
{
    /// <summary>
    ///         
    /// </summary>
    public interface ICategoryService
    {
        /// <summary>
        ///     
        /// </summary>
        /// <param name="category"></param>
        void Add(CategoryInfo category);

        /// <summary>
        ///       
        /// </summary>
        /// <param name="id"></param>
        /// <param name="name"></param>
        void ChangeName(int id,string name);

        /// <summary>
        ///     
        /// </summary>
        /// <param name="id"></param>
        void Remove(int id);

        /// <summary>
        ///           
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        CategoryInfo GetDetail(int id);

        /// <summary>
        ///       
        /// </summary>
        /// <returns></returns>
        List<CategoryInfo> GetAll();
    }
}

IAnnounceService.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MVCDemo.Models.Entities;

namespace MVCDemo.Models.Interfaces
{
    /// <summary>
    ///         
    /// </summary>
    public interface IAnnounceService
    {
        /// <summary>
        ///     
        /// </summary>
        /// <param name="announce"></param>
        void Release(AnnounceInfo announce);

        /// <summary>
        ///       
        /// </summary>
        /// <param name="announce"></param>
        void Notify(AnnounceInfo announce);

        /// <summary>
        ///     
        /// </summary>
        /// <param name="id"></param>
        void Remove(int id);

        /// <summary>
        ///         
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        AnnounceInfo GetDetail(int id);

        /// <summary>
        ///             
        /// </summary>
        /// <param name="categoryId"></param>
        /// <returns></returns>
        List<AnnounceInfo> GetByCategory(CategoryInfo category);
    }
}

次に、MockModelsの下で2つのMockビジネスロジックサービスモデルを構築します.それぞれのインタフェースを実現することに注意してください.MockCategoryService.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MVCDemo.Models.Interfaces;
using MVCDemo.Models.Entities;

namespace MVCDemo.Models.MockModels
{
    /// <summary>
    /// “  ”    ,           
    /// </summary>
    public class MockCategoryService : ICategoryService
    {
        /// <summary>
        ///     
        /// </summary>
        /// <param name="category"></param>
        public void Add(CategoryInfo category)
        {
            return;
        }

        /// <summary>
        ///       
        /// </summary>
        /// <param name="id"></param>
        /// <param name="name"></param>
        public void ChangeName(int id, string name)
        {
            return;
        }

        /// <summary>
        ///     
        /// </summary>
        /// <param name="id"></param>
        public void Remove(int id)
        {
            return;
        }

        /// <summary>
        ///           
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public CategoryInfo GetDetail(int id)
        {
            return new CategoryInfo
            {
                ID = id,
                Name = "    ",
            };
        }

        /// <summary>
        ///       
        /// </summary>
        /// <returns></returns>
        public List<CategoryInfo> GetAll()
        {
            List<CategoryInfo> categories = new List<CategoryInfo>();
            for (int i = 1; i <= 5; i++)
            {
                CategoryInfo category = new CategoryInfo
                {
                    ID = i,
                    Name="    "+i,
                };

                categories.Add(category);
            }

            return categories;
        }
    }
}

MockAnnounceService.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MVCDemo.Models.Interfaces;
using MVCDemo.Models.Entities;

namespace MVCDemo.Models.MockModels
{
    /// <summary>
    /// “  ”    ,           
    /// </summary>
    public class MockAnnounceService : IAnnounceService
    {
        /// <summary>
        ///     
        /// </summary>
        /// <param name="announce"></param>
        public void Release(AnnounceInfo announce)
        {
            throw new Exception("       !  ?    !      ,       !");
            return;
        }

        /// <summary>
        ///       
        /// </summary>
        /// <param name="announce"></param>
        public void Notify(AnnounceInfo announce)
        {
            return;
        }

        /// <summary>
        ///     
        /// </summary>
        /// <param name="id"></param>
        public void Remove(int id)
        {
            return;
        }

        /// <summary>
        ///         
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public AnnounceInfo GetDetail(int id)
        {
            return new AnnounceInfo
            {
                ID = id,
                Title = " " + id + "   ",
                Content = "              !",
            };
        }

        /// <summary>
        ///             
        /// </summary>
        /// <param name="categoryId"></param>
        /// <returns></returns>
        public List<AnnounceInfo> GetByCategory(CategoryInfo category)
        {
            List<AnnounceInfo> announces = new List<AnnounceInfo>();
            for (int i = 1; i <= 10; i++)
            {
                AnnounceInfo announce = new AnnounceInfo
                {
                    ID = i,
                    Title = category.Name+ "  " + i + "   ",
                    Content = "              !",
                };

                announces.Add(announce);
            }

            return announces;
        }
    }
}

この2つのクラスはデータベースにアクセスしていないし、本当のビジネスロジックも実現していないが、いくつかのデータを捏造して私たちの表示層をだましたにすぎないことがわかります.
最後に,表現層とビジネスロジック層のデカップリングを実現するために,ビジネスロジックモデルを生成するジェネレータを構築する.もちろん,複雑さを簡略化するために,ここでは依存注入機構は用いられていない.次はジェネレータのコードです.このクラスはModelsの下に直接置かれています.
ServiceBuilder.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MVCDemo.Models.Interfaces;
using MVCDemo.Models.MockModels;

namespace MVCDemo.Models
{
    /// <summary>
    ///        ,          
    /// </summary>
    public sealed class ServiceBuilder
    {
        /// <summary>
        ///         
        /// </summary>
        /// <returns>      </returns>
        public static ICategoryService BuildCategoryService()
        {
            return new MockCategoryService();
        }

        /// <summary>
        ///         
        /// </summary>
        /// <returns>      </returns>
        public static IAnnounceService BuildAnnounceService()
        {
            return new MockAnnounceService();
        }
    }
}

OK、ここまで来たら、私たちの準備は終わりました.これらが完了すると、システムのディレクトリ構造は次の図のようになります.
 
小結
この文章では、このシリーズの文章が何をするか、ケースのためにいくつかの準備をしただけです.次編からは、本格的にASPの使用を開始します.NET MVCはこのケースを完成させた.