ASP.NET Core,作為微軟推出的跨平台、高效能的開源框架,廣泛套用於Web套用開發。在ASP.NET Core的設計和實作中,運用了許多經典的設計模式,以提高程式碼的可維護性、可延伸性和靈活性。本文將深入探討ASP.NET Core中常見的設計模式,並透過例項程式碼進行說明。
1. MVC(模型-檢視-控制器)模式
MVC是ASP.NET Core中最基本也最重要的設計模式之一。它將應用程式的使用者介面分為三個部份:Model(模型)、View(檢視)和Controller(控制器)。
Model :負責數據和業務邏輯,通常包含數據驗證和數據處理方法。
View :負責顯示使用者介面,通常由HTML、CSS和JavaScript組成。
Controller :處理使用者請求和邏輯,接收並響應HTTP請求,協調Model和View之間的互動。
範例程式碼:
// Model
public classBook
{
publicint Id { get; set; }
publicstring Title { get; set; }
publicstring Author { get; set; }
}
// Controller
[ApiController]
[Route("[controller]")]
public classBooksController : ControllerBase
{
[HttpGet]
public ActionResult<List<Book>> GetAllBooks()
{
// 模擬數據獲取
var books = new List<Book>
{
new Book { Id = 1, Title = "Book 1", Author = "Author 1" },
new Book { Id = 2, Title = "Book 2", Author = "Author 2" }
};
return books;
}
}
// View(在ASP.NET Core中,檢視通常由Razor頁面或檢視元件實作)
// 例如,在Views/Books/Index.cshtml中:
@model List<Book>
<ul>
@foreach (var book in Model)
{
<li>@book.Title by @book.Author</li>
}
</ul>
2. 依賴註入(Dependency Injection, DI)模式
依賴註入是ASP.NET Core的核心特性之一,它允許將服務的例項透過建構函式註入到控制器或其他服務中,從而實作解耦和可測試性。
範例程式碼:
publicinterfaceIBookService
{
List<Book> GetAllBooks();
}
public classBookService : IBookService
{
public List<Book> GetAllBooks()
{
// 實作獲取所有書籍的邏輯
}
}
public classBooksController : ControllerBase
{
privatereadonly IBookService _bookService;
publicBooksController(IBookService bookService)
{
_bookService = bookService;
}
// 控制器方法...
}
// 在Startup.cs中註冊服務:
publicvoidConfigureServices(IServiceCollection services)
{
services.AddScoped<IBookService, BookService>();
// 其他服務註冊...
}
3. 工廠模式(Factory Pattern)
工廠模式用於建立物件,隱藏了物件建立的具體細節,將物件的建立與使用分離。在ASP.NET Core中,工廠模式常用於建立具有復雜初始化邏輯的物件。
範例程式碼:
publicinterfaceIBookFactory
{
Book CreateBook(string title, string author);
}
public classBookFactory : IBookFactory
{
public Book CreateBook(string title, string author)
{
returnnew Book { Title = title, Author = author };
}
}
// 使用工廠建立書籍例項:
public classBooksController : ControllerBase
{
privatereadonly IBookFactory _bookFactory;
publicBooksController(IBookFactory bookFactory)
{
_bookFactory = bookFactory;
}
[HttpPost]
public ActionResult CreateBook([FromBody] BookInput input)
{
var newBook = _bookFactory.CreateBook(input.Title, input.Author);
// 保存書籍邏輯...
return Ok();
}
}
4. 介面卡模式(Adapter Pattern)
介面卡模式用於將一個類的介面轉換成客戶端所期望的另一個介面,使得原本不相容的類能夠協同工作。在ASP.NET Core中,這通常用於整合第三方庫或舊系統。
範例程式碼:
publicinterfaceILoggingService
{
voidLog(string message);
}
public classThirdPartyLogger
{
publicvoidWriteLog(string message) { /* 第三方日誌記錄邏輯 */ }
}
public classLoggingServiceAdapter : ILoggingService
{
privatereadonly ThirdPartyLogger _thirdPartyLogger = new ThirdPartyLogger();
publicvoidLog(string message)
{
_thirdPartyLogger.WriteLog(message); // 適配第三方日誌記錄方法
}
}
5. 裝飾器模式(Decorator Pattern)
裝飾器模式允許使用者在不改變物件結構的情況下,動態地給物件增加一些額外的職責(功能)。在ASP.NET Core中,這可以用於擴充套件現有功能或添加日誌記錄、效能監控等橫切關註點。
範例程式碼:
publicinterfaceIHandler
{
voidHandleRequest();
}
public classConcreteHandler : IHandler
{
publicvoidHandleRequest() { /* 處理請求的邏輯 */ }
}
publicabstract classHandlerDecorator : IHandler
{
protectedreadonly IHandler _handler;
publicHandlerDecorator(IHandler handler)
{
_handler = handler;
}
publicabstractvoidHandleRequest();
}
public classLoggingHandlerDecorator : HandlerDecorator
{
publicLoggingHandlerDecorator(IHandler handler) : base(handler) { }
publicoverridevoidHandleRequest()
{
// 日誌記錄邏輯...
_handler.HandleRequest(); // 呼叫實際處理邏輯
// 可能還有後續日誌記錄邏輯...
}
}
以上只是ASP.NET Core中常見設計模式的一部份範例。實際上,設計模式的運用貫穿於整個框架的方方面面,為開發者提供了靈活且可延伸的編程模型。深入理解和熟練掌握這些設計模式,對於開發出高品質、可維護的ASP.NET Core應用程式至關重要。