C#.NET Core CRUD 基本資料維護實作範本 – 三層式架構以及可以切換 E.F Core 6 與 ADO.NET 實作

C#.NET Core CRUD  基本資料維護實作範本 – 三層式架構以及可以切換 E.F Core 6 與 ADO.NET 實作

已經整理好 C#.NET Core CRUD (Create,Read,Update,Delete) 基本資料維護的實作範本,並已上傳至 Github 供下載:https://github.com/kenming/petstore-crud-template-csharp

關於該範本如何執行 (包括跑單元測試)、主要引導功能、開發工具與建置、類別圖展示等,已具體詳細寫在 README.md 文件。

建議要執行該應用程式前,先更改下 Sqlite 資料庫檔案路徑,然後先執行測試專案內的所有單元測試方法

關於該範本所涵蓋的一些設計思維與所對應的實作問題,版友們可以提問討論與分享想法。關於程式碼的實作細節與設計思維,我還會另撰寫文章詳細說明。

後續的版本演進我會再加上:

  • 多個表格關聯的 CRUD 實作。
  • 使用 Mock 應用在單元測試,隔離 Service 類別依賴具體 Dao 的資料庫存取。
  • 使用 Vue UI 框架整合本範例。

Brief Description

網路上看到關於基本資料維護的 CRUD 範例幾乎都是資料導向 (data oriented) 的寫法,也就是把 MVC Controller 與 資料存取綁在一起。現實上稍有規模的專案採用這種開發模式會導致系統的複雜度提升,不容易應變。

花了幾天時間撰寫了 C#.NET Core (前年有寫過 Java Spring 的版本) 關於單一資料表的 CRUD 程式碼範本,這是一個完全符合三層式架構的應用程式,同時我這個專案範本可以切換 E.F Core 與 ADO.NET 資料庫的存取實作。

關於 Java/Spring 版本,我則打算再重新改寫,架構當然與 C#.NET Core 是一樣的,只是實作的細節必然會調整下。資料庫的存取方式則打算同時提供 JDBCTemplate 與 MyBatis 的 CRUD 範本。

Features

  • 提供開發三層式 (Presentation -> Application Logic -> Datasource) 架構的 CRUD 實作範本
  • 同時提供 E.F Core (Entity Framework Core) 與 ADO.NET 資料存取方式,並可以切換資料庫存取的實作
  • 實作 E.F Core 與 ADO.NET 的 DAO (Data Access Object) 均各自有撰寫單元測試程式 (Unit Test Code)
  • 專案內嵌 Sqlite,並使用兩種實作方式:
  • File-based 為正常存取用的資料庫,提供給 View 操作
  • Memory-DB 應用在單元測試的 Create, Update, Delete ,避免影響到正常資料庫的存取行為

Development

Class Diagram

Build & Run

下載專案,使用 VS 2002 開啟 .sln 檔案,編輯「appsetting.json」檔案內關於 SqliteDB 檔案實際儲存路徑 (位於下載專案所在路徑內的 \Data 目錄):

  "ConnectionStrings": {
    "SqliteDB": "Data Source = C:\\Projects\\PetStoreCRUDSolution\\Data\\PetStoreDB.db",
    "SqliteMemoryDB": "Data Source = :memory:"
  }

Sqlite 資料庫內已新增 Product Table 與 8 筆測試用資料,DDL & DML Script 已放於專案 \Data 目錄內。另外可以安裝如 DBeaver Database Tool 連接 SQLite 並自行檢視與存取資料。

在「ManageProductService」類別內 Constructor 可以更改資料庫連結實作方式 (預設採用 E.F Core 6)

    public ManageProductService()
    {
        // default : use EF Core to connect to database.
        ProductDao = new ManageProductDaoByEFCore();
        //ProductDao = new ManageProductDaoByADO();
    }

在 VS.NET 內執行「偵錯」→「啟動但不偵錯」或直接按下【CTRL-F5】執行,即可自動啟動瀏覽器進入首頁。點選「PetStore Demo」,即可出現關於 Product CRUD 的操作。

Unit Test (單元測試)

選單「Test」→ 「Test Explore」開啟「Test Explore (測試總管)」窗格,可以一次執行所有單元測試案例,或個別針對其中一個測試方法執行。

如果要追蹤某一個單元測試執行情形 (先對某段程式碼內陳述設中斷點),可以選擇「偵錯 (debug)」方式執行單元測試。

Feedback

相關軟體思維問題,歡迎電郵或參與 Facebook - 軟體設計鮮思維 社群討論。

License

MIT © Richard Littauer

文章導覽

   

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。