EZNEW.NET是一套基於領域驅動開發(DDD)為指導思想的企業級項目通用開發框架。通過將當前主流的開發技術和最佳的開發實踐相結合,將開發中常見且嚴重影響開發效率的繁瑣技術細節進行了模塊化的封裝,讓開發人員能將更多更多精力聚焦在系統業務的分析中去,快速開發出高質量的應用程序。
代碼託管地址:https://github.com/eznew-net
詳細的開發文檔地址:http://www.eznew.net/#/introduction
功能特點
- 簡單:告別繁瑣的技術細節,專注於開發業務本身
- EZNEW.NET是一套基於領域驅動開發(DDD)為指導思想的企業級項目通用開發框架。通過將當前主流的開發技術和最佳的開發實踐相結合,將開發中常見且嚴重影響開發效率的繁瑣技術細節進行了模塊化的封裝,讓開發人員能將更多更多精力聚焦在系統業務的分析中去,快速開發出高質量的應用程序。
- 易用:零使用門檻,讓各級開發人員都能快速上手
- 代碼實現簡單,項目結構清晰,去除複雜難懂的過度設計,以迴歸到最熟悉的開發模式的方式讓開發人員能快速的瞭解整個使用流程並上手使用。
- 靈活:獨立易擴展的功能模塊,提供更好的功能自定義和擴展能力
- 各主要功能模塊相互獨立,並通過結合依賴注入(DI)等技術手段應用到項目中,不但保證了功能的結構清晰和靈活,同時也方便在需要的時候進行功能的定製和擴展。
- 高效:大幅提高開發人員工作效率
- 立足於框架本身的便捷性,同時配合使用EZNEW.NET開發輔助工具可以成倍的提高開發人員的日常工作效率,讓程序員能有更多的時間去做更多有意義的事,學習新技術或者去找女朋友…
快速開始基本操作
- 保存數據(新增/修改)
- 工作單元的基本使用
- 熟悉修改表達式的使用
- 查詢對象基本概念
- 瞭解查詢表達式的基本使用
保存【角色】
1:填寫角色信息
2:SysController調用RoleService
3:RoleService調用RoleBusiness
4:RoleBusiness執行業務工作,這個業務工作中主要包含3個主要工作步驟
+ 創建工作單元,推薦使用using語法來明確定義一個工作任務執行區域,第一是為了業務代碼的結構清晰,
最重要的是在工作執行完成返回後不需要手動去管理工作單元對象的釋放工作
+ 調用角色的領域服務執行具體的角色保存工作
+ 工作提交,在前面完成的一系列工作,例如保存,更新,刪除等只有在將整個工作提交後才會將這些變化
反應到數據庫中
5:Business主要負責業務事務中一些列工作任務的管理,具體的業務邏輯通常都在各自的對象或者領域服務中, 所以這裡調用的是領域服務RoleDomainService來執行具體的保存邏輯,通過參數決定執行新增還是修改邏輯, 不管是執行新增還是修改,最後都是通過調用對象的Save方法進行保存,當然這裡也可以直接通過倉儲(repository) 對象保存數據,這裡雖然我們執行了不同的新增和修改邏輯,但是也只是針對業務上執行不同的對象賦值等相關邏輯, 對象數據處理完成以後都是執行的保存(Save)方法,因為在這裡我們是將我們的對象看作一種資源,資源和倉儲之間 常常涉及到的關係也就是保存,取出,移除(就好像現實中貨物和倉庫之間的關係),至於最終執行的是新增資源還是修改 現有資源是框架中的資源管理機制根據對象的狀態在執行提交的時候自動進行判斷的,資源的管理機制會在後續文章中詳細講解, (這裡還涉及到領域對象,領域服務,領域邏輯的設計,交互和排列的合理性,例如通常會碰到是將業務邏輯放在對象中還是 領域服務中的問題,這個沒有統一的標準,只能根據自己的業務場景和要執行的操作具體分析,通常建議是和某一對象 本身關係比較緊密的操作放到對象中去,其它一些複雜的不太適合放在對象中的代碼移到領域服務中去)
6:在Business中我們是通過最後的提交(Commit)結果來判斷是否執行成功並返回結果的,執行工作提交返回的是一個CommitResult對象, 它包含了最終提交結果的反饋信息,這當中包含了幾種不同的屬性信息,要判斷自己的工作是否真正的提交成功就要根據具體執行的業務 功能來判斷
+ ExecutedSuccess:提交執行功能,並且執行的操作確實影響了相應的數據
+ EmptyResultOrSuccess:未提交任何操作,未操作任何數據或執行成功,意思就是這一的工作提交可能最終沒有執行任何
真正有意義的數據操作或者全部執行成功,這種情況通常出現在修改或者刪除
數據操作中,例如在對一個數據對象經過一系列操作後,最後提交的時候
數據管理器發現實際上它並沒有執行任何數據的修改,就不會提交數據修改命令
根據條件移除數據的時候最後發現符合條件的數據可供刪除等等,這些現象
嚴格來說並不是錯誤,甚至某些情況下還是我們期望得到的結果,
所以也是工作成功執行的標誌。
7:這樣我們就完成了一條簡單的角色信息保存的過程,至於底層數據的相信操作邏輯在我們後續講解到相關的模塊功能的時候再詳細說明 這裡我們主要先初步瞭解數據保存的一個基本執行過程
查詢【角色】
1:從Mvc Controller到Business的調用流程基本上和前面保存數據是一樣的,只是查詢數據的話我們需要傳遞相應的查詢參數,這裡 將這些查詢參數封裝成一個篩選對象傳遞給我們的查詢方法
2: 在Business中通過查詢參數生成查詢表達式(IQuery)並獲取數據,在系統中所有需要根據條件的地方都是將相應的條件封裝成一個查詢表達式來使用 關於查詢表達式的詳細使用後續會有專門的篇章進行講解,這裡先初步看看如何使用。在這裡我們可以看到是怎樣將查詢參數應用到查詢表達式中, 除了這裡使用的條件擴展方法外我們後續還會看到如何通過lambda表達式的方式更方便的使用查詢表達式。這裡還出現了另外一個對象, 就是查詢對象(RoleQuery),這個查詢對象其實並不是和領域對象相對應的,通常情況下是和實體對象相對應的(這裡始終感覺和我們系統上的某系概念格格不入, 但是一直沒找到更好的解決辦法,而且實際使用上也沒有什麼大的問題),查詢對象的作用一般情況下只是用來輔助構建查詢表達式,但是在涉及到一些複雜的查詢 的時候還有一些其它額外的功能,同樣這一塊內容會放到查詢表達中詳細講解
3:同樣,還是通過RoleDomainService來獲取角色數據
刪除數據
1:傳遞需要刪除的角色條件參數
2:Business中執行和保存相似的操作步驟
3:調用DomainService執行角色刪除,注意,因為角色信息的數據結構是我們常見的級聯關係型數據,也就是樹形結構的數據,在刪除角色的時候我們希望刪除它的所有子孫數據 所以這裡演示了查詢表達式的一種特殊功能,遞歸條件(對應數據庫中相關的遞歸功能),在查詢數據的時候也可以使用這種功能可以一次性取出相關聯的數據(注意,這種複雜的查詢 條件並不是以對象為基礎的功能操作,更多的是為了貼合傳統數據庫的操作模式,使用起來雖然很方便,但是在複雜的業務流程中可能會破壞對象資源管理器的作用,所以使用的時候需要 小心慎重,這一點還會在後續的教程中詳細說明)
總結
以上主要演示了對數據的幾個基本操作的流程,同時接觸了幾個比較重要的概念,工作單元,查詢表達式,查詢對象等等。
最後再次附上github代碼託管地址:https://github.com/eznew-net
多多支持.net社區開源的優秀框架
閱讀更多 開源大學習 的文章