摘要: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);
}
}