ASP.NET Repository分層設計

  • 9072
  • 0
  • 2013-11-12

摘要:ASP.NET Model撰寫說明

 前言

        本篇針對Repository分層設計概念,建立介面(interface),實作介面類別及Controller繼承介面的使用來做說明,一來可以讓Controller程式碼更簡短有力,二來可以明確定義有哪些功能,增加程式的易讀性。
 
1. 建立Interface
  於Model資料夾建立一個叫IBookRepository.cs的檔案,並定義介面的功能,如下:
 
public interface IBookRepository
{
        IList<<bookentry>> GetMostRecentEntries();
        void AddEntry(BookEntry entry);
        BookEntry FindById(int id);
        IList<<commentsummary>> GetCommentSummary(); 
}
(1) 一般來說,介面的命名方式通常會以大寫I做為開頭:IBookRepository
(2) 定義介面,其回傳的型別就是interface
 
2. 實作Interface
  定義完成介面後,需要去實作介面的方法,因此要建立一個Class去實作。我們於Model建立BookRepository Class。
(1) 首先,在實作介面的方法時,需繼承我們要實作的介面,如下:
 
public class GuestbookRepository : IGuestbookRepository
 
(2) 再來就可以開始實作介面的方法。
我們依據介面定義的四個Method,先建立四個Method的框架,如下:
 
public IList<<bookentry>> GetMostRecentEntries()
{
   //撰寫方法            
}

public void AddEntry(BookEntry entry) 
{           
  //撰寫方法

}

public BookEntry FindById(int id)
{
  //撰寫方法

}

 public IList<<commentsummary>> GetCommentSummary()
{
 //撰寫方法
}
 
(3) 接著就可以開始撰寫每個Method的細部功能,此
 
3.Controller使用
宣告interface: private IBookRepository _repository;
以下是controller的程式碼,這樣看起來是不是乾淨多了呢。
 
  public class BookController : Controller
    {
        //宣告interface
        private IBookRepository _repository;
 
        //實體化interface      
        public BookController()
        {
            _repository = new BookRepository();
        }

        public ActionResult Index()
        {
            //呼叫介面方法 GetMostRecentEntries
            var mostRecentEntries = _repository.GetMostRecentEntries();
            return View(mostRecentEntries);
        }
 
        [HttpPost]
        public ActionResult Create(GuestbookEntry entry)
        {
            if (ModelState.IsValid)
            {
                //呼叫介面方法 AddEntry
                _repository.AddEntry(entry);
                return RedirectToAction("Index");
            }

            return View(entry);
        }

        public ViewResult Show(int id)
        {
            //呼叫介面方法 AddEntry
            var entry = _repository.FindById(id);
            bool hasPermission = User.Identity.Name == entry.Name;
            ViewBag.HasPermission = hasPermission;
            return View(entry);
        }

        public ActionResult CommentSummary()
        {
            //呼叫介面方法 AddEntry
            var entries = _repository.GetCommentSummary();
            return View(entries);
        }
    }