(15):チュートリアル(4)〜Bussiness Moduleの作成〜

  • 著者情報を扱うビジネスモジュール「AuthorsBL.dll」を作成する。
    • (1)[Module]フォルダを右クリックして、[Web Client Factory]−[Add Bussiness Module]を選択する。(Bussiness Moduleとは、特定のドメインに特化したモジュールのこと)

    • (2)[Add New Project]ダイアログが表示される。プロジェクト名に「AuthorBL」と入力して[OK]をクリック。


    • (3)[Add Bussiness Module]ダイアログが表示される。「Use module name as Web site folder name」のチェックを外し、Webサイトのフォルダ名を「Authors」に設定する。ユニットテスト用のプロジェクトも作成するため「Create project for unit tests」にチェックをいれる。[完了]をクリック。


    • (4)AuthorsBLプロジェクトとAuthorsBL.Testsプロジェクトが生成される。テストプロジェクトはいったんアンロードしておく。


    • (5)Entityフォルダを作成し、アクセッサから構成されるAuthorsクラスを作成。
using System;
using System.Collections.Generic;
using System.Text;

namespace MyWcsf.AuthorsBL.Entity {
    //著者情報を格納するクラス(ページでの表示用)
    public class Author {

        private int _id; //ID
        public int Id {
            get { return _id; }
            set { _id = value; }
        }

        private string _name; //著者名
        public string Name {
            get { return _name; }
            set { _name = value; }
        }
        
        private string _tel; //電話番号
        public string Tel {
            get { return _tel; }
            set { _tel = value; }
        }

        private string _regDage; //登録日
        public string RegDage {
            get { return _regDage; }
            set { _regDage = value; }
        }
    }
}
    • (6)AuthorsBLControllerクラスに、AUTHORTableAdapterプロパティ、GetAuthorsメソッド、GetAuthorByIdメソッドを追加。*1
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Practices.CompositeWeb;

using MyWcsf.Dao.AuthorsTableAdapters;
using MyWcsf.AuthorsBL.Entity;
using Microsoft.Practices.ObjectBuilder;

//コントローラ(ページ間で共通の処理やページ遷移を記述するクラス)
namespace MyWcsf.AuthorsBL {
    public class AuthorsBLController {
        
        //コンストラクタ
        public AuthorsBLController() {
        }

        //プロパティ・・・DAO層のTableAdapter
        //(ObjectBuilderでプロパティインジェクション)
        private AUTHORTableAdapter _authorTA;
        [Dependency(CreateType=typeof(AUTHORTableAdapter))]
        public virtual AUTHORTableAdapter AUTHORTableAdapter
        {
            set { _authorTA = value; }
        }

        //著者を全員取得するメソッド
        public virtual IList<Author> GetAuthors()
        {
            List<Author> result = new List<Author>();
            foreach (Dao.Authors.AUTHORRow row in _authorTA.GetData().Rows) {
                Author author = new Author();
                author.Id = row.ID;
                author.Name = row.NAME;
                author.Tel = row.TEL;
                author.RegDage = row.REG_DATE.ToString("yyyy/MM/dd");
                result.Add(author);
            }
            return result;
        }

        //キーにて著者を1人取得するメソッド
        public virtual Author GetAuthorById(int id)
        {
            Author result = null;
            foreach (Dao.Authors.AUTHORRow row in _authorTA.GetDataById(id).Rows) {
                result = new Author();
                result.Id = row.ID;
                result.Name = row.NAME;
                result.Tel = row.TEL;
                result.RegDage = row.REG_DATE.ToString("yyyy/MM/dd");
            }
            return result;
        }

    }
}

*1:各メンバにvirtualを付加しているのは、テストプロジェクトでは、Controllerクラスを継承したMockを利用するため。テストに都合の悪いメンバの振る舞いをMockでオーバライドして変更できる。