您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Asp.Net Core工作單元中的UnitOfWork數據訪問模式是怎樣的,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
有些同學可能會說我現在的項目毫無項目架構可言,是真的嗎?為什么會出現這種疑問。
項目架構這個東西是不斷的根據自己的實際業務來演變過來的,在這個前輩們探索的過程中,因此慢慢的提煉別總結出了一些經驗(也就是設計思想),最后就形成了架構模式吧。
一切事物存在即合理,所以你的項目一定是有架構可言的,只是當前的這個架構可能無法更好的滿足你業務要求了,你需要進行演變升級了哦。
系統架構分層和項目架構分層的區別?
這兩個從字面意思很容易混淆,但是這兩個概念的確是兩碼事,希望大家能否分的清楚。
? 系統架構分層:站的角度是硬件(物理)層面(反向代理,正向代理,第三方中間件)。
? 項目架構分層:站的角度是軟件(邏輯)層面(Code代碼層面)。
? 優點:分層簡單,容易上手,是code monkey猴子都容易上手。
? 缺點:大量重復性的CRUD代碼。
阿笨經常說的一句話:erverything is price
一個新的東西的引入雖然解決了上一個存在的問題,但是也是有代價了,將會產生出新的問題。
顧名思義,三層架構分為三層,分別是“數據訪問層”、“業務邏輯層”、“表示層”。
? 數據訪問層(DAL):實現對數據庫中數據的讀取和保存操作。
? 業務邏輯層(BLL):它是DAL和UI層的連接橋梁.既然稱作業務層,必然有他的用處,不僅僅是一個中轉的功能。
阿笨給大家的建議要記住UI層面上的邏輯可以放在UI層,業務層面上的邏輯建議還是規范一點放在業務邏輯層。業務邏輯層BLL到底有什么用?
https://www.cnblogs.com/Garden-blog/archive/2011/04/12/2013268.html? 表示層(UI):主要功能是顯示數據和接受傳輸用戶的數據,例如Windows窗體和Web頁面。
1)、什么是倉儲(Repository)是什么?
Repository;中文翻譯為倉庫,大家都知道倉庫里面裝了很多各種各樣的東西,那么你需要東西只要從倉庫里面拿去就可以了,你不用關系倉庫里面的東西存放在具體的那個位置上。調用方不要問,也不需要知道,你只負責從里面拿(獲取)即可。
一般結合ORM框架,比如EF,Dapper等等。因為這類的框架天生就具備了高度復用的CRUD特性功能。
? 優點:
1、CRUD達到了復用目的(把一些公共的調用數據庫的方法剝離出來,減少冗余的代碼)。
2、為業務開發(程序開發)提供統一的規范。大家編碼都規范了,都按照標準的作業模式讓倉庫中放存放(編寫代碼)自己的東西了,用到的時候大家都可以互相借用(共用)。
? 缺點:
1)、多個Repository之間怎么保存在一個事務單元內的操作?
1. 什么叫工作單元?
跨多個請求的業務,統一管理事務,統一提交。
2. 為什么要工作單元?
我們經常的代碼都是分層的,有可能到處都在 new DbContext(options),這是就要面對如何管理這些DbContext,在AspNetCore中 services.AddDbContext<>默認是用的Scope的作用域,也就是每次HttpRequest,比以前好了很多。但是事務這些管理還是很麻煩。
如上圖 有一個Action需要調用很多Service 然后 Service之間又相互調用,在開啟Action時 其實是想開啟一個事務,但是某些內部代碼有可能自己去開啟了事務。相互之間調用管理起來非常麻煩。經常出現不可估計的問題。如果有一個集中管理的地方就好很多。比如在Action這里啟動一個工作單元,后續所有的業務都使用同一個事務 和 DbContext,這才是我們的預期的。
3. 如何使用工作單元?
http://www.aspnetboilerplate.com/Pages/Documents/Unit-Of-Work
只需要記住一點:當 Unit Of Work 中的 Commit() 方法執行時,所有倉庫Repository中發生在對象上的修改都將提交到數據庫中。
關于Asp.Net Core工作單元中的UnitOfWork數據訪問模式是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。