當前位置: 妍妍網 > 碼農

ASP.NET Core中的設計模式

2024-05-30碼農

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 { getset; }
    publicstring Title { getset; }
    publicstring Author { getset; }
    }
    // 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應用程式至關重要。