領域驅動設計案例 Tiny Library 簡介

2022-01-20 16:38:03 字數 2615 閱讀 7633

應廣大網友的要求,我最近抽空基於asp.net mvc + wcf + entity framework做了乙個案例,該案例以圖書館圖書管理、讀者借書、還書為業務背景,以領域驅動設計為思想指導,全程採用microsoft技術進行實踐,希望能夠給microsoft技術的狂熱者以及領域驅動設計的學者提供實踐參考。

本案例選用的業務邏輯非常簡單,所以專案取名上我選用了「tiny library」,在後面一章我將詳細介紹這個案例的業務邏輯、模型設計與系統架構。

本來打算將專案發布到codeplex上,便於大家交流,也便於**更新與維護,但由於某些原因,我無法在自己的網路環境中連線codeplex的svn/tfs服務,於是,目前只能以壓縮包的形式發布案例源**,希望大家諒解,等以後有機會更新到codeplex上後再通知大家。

系統需求

請在開啟本案例解決方案之前自行安裝上述軟體和元件!

安裝部署

建立資料庫

使用microsoft visual studio 2010提供的server explorer功能,在data connections上單擊滑鼠右鍵,選擇create new sql server database選項,此時出現create new sql server database對話方塊,在對話方塊的server name中輸入(local)\sqlexpress,在new database name中輸入tinylibrarydb,之後單擊ok按鈕

建立資料庫schema

使用microsoft visual studio 2010開啟tinylibrary解決方案,在tinylibrary.domain專案節點下找到tinylibrary.edmx.sql指令碼檔案,開啟此指令碼檔案,在sql editor區域,點選滑鼠右鍵,選擇connection | connect選單,此時彈出connect to database engine對話方塊,server選擇sqlexpress,然後單擊ok

再次在sql editor區域點選滑鼠右鍵,選擇execute sql選項,執行sql指令碼以建立資料庫schema

建立演示資料(demo data)

以上述同樣的方式,開啟tinylibrary.domain專案下的tinylibrary.demodata.sql指令碼並執行

3722埠

tiny library的wcf service採用3722埠作為其服務的固定埠,因此在使用本案例錢,確保該埠未被其它應用程式占用

執行案例

在microsoft visual studio 2010的solution explorer上,右鍵單擊tinylibrary solution然後選擇rebuild solution以重新編譯解決方案

在tinylibrary.services專案下,選中tinylibraryservice.svc,然後單擊右鍵,選擇view in browser,此時會自動開啟asp.net development server,埠占用3722,同時開啟wcf service的頁面。此時將wcf service的頁面關閉,僅留下asp.net development server

應用程式啟動後,可以看到主介面如下

登入賬號

測試需要,tiny library預設提供三個使用者賬戶:daxnet、acqy和james。使用者名稱、密碼如下:

登入名:daxnet;名稱:daxnet;密碼:[email protected]

登入名:acqy;名稱:sunny chen;密碼:[email protected]

登入名:james;名稱:james;密碼:[email protected]

額外說明

時間有限,本案例僅僅是乙個基於microsoft.net技術的領域驅動設計實踐案例,因此,如下內容沒有包含在本案例中:

基於aop和policy injection的技術實踐。這包括:異常處理、資料驗證與系統日誌

基於使用者/角色驗證的圖書維護頁面

asp.net mvc的高階應用

wcf的異常捕獲與顯示

單元測試

其它的一些技術細節

有興趣的朋友可以在本案例源**的基礎上進行擴充,以實現一套完整的圖書館管理應用。

領域驅動設計案例之實現業務3

這一部分主要介紹如何實現下訂單的業務,下訂單的業務主要涉及到salesorder,orderitem,customerinfo與productinfo幾個領域物件 public partial class productinfo valueobject public partial class cu...

領域驅動設計系列(一) 為何要領域驅動設計?

領域驅動設計最近貌似開始火起來了,越來越多的人開始認識到領域設計的重要性,從我做過的專案來看,似乎歐洲已經有很多的公司開始實施領域驅動設計了,我看領域驅動設計也有些時間了,但是網上不管是文章還是 都顯得太過 高大上 一談領域驅動設計,一大堆的概念一股腦的給你上上來,搞的有點暈頭轉向,而我想在一些中小...

領域驅動設計案例之領域層實體與聚合根實現

在領域層中,可以實現實體與聚合根的業務邏輯,在實現業務邏輯之前,我們首先要確定實體和聚合根的一些基本行為,比如判斷實體是否相等。關於領域物件的具體業務邏輯實現,因為涉及到要與資料庫互動,所以等看完倉儲的實現後,再實現領域物件的業務邏輯。using system using order.domain....