摘要:工作單元用于維護受業務事務影響的對象列表,并協調變化的寫入和并發問題的解決。工作單元控制器工作單元控制所有數據庫的讀操作,一旦對象被讀取,將將它注冊為干凈的對象。
1. 工作單元
用于維護受業務事務影響的對象列表,并協調變化的寫入和并發問題的解決。如下:
1)運行機制: 關鍵:是提交時,決定要做什么。它打開一個事務,做所有的并發檢查(使用悲觀離線鎖或樂觀離線鎖)并向數據庫寫入所做的修改。(開發人員根本不用顯示調用數據庫更新方法)
記錄對象更新的方法:調用者注冊方式:用戶如果改變了某個對象就必須將他注冊到工作單元,任何沒有注冊的對象提交時都不會寫入數據庫。
對象注冊方式:注冊方法置于對象中,從數據庫加載對象會將加載的對象注冊為“干凈”的,setting方法將要設置的對象注冊為“臟”的。
工作單元控制器:工作單元控制所有數據庫的讀操作,一旦對象被讀取,將將它注冊為“干凈”的對象。工作單元在讀操作時將產生一個拷貝,在提交時比較當前對象和拷貝對象(這種的辦法是指發生改變的對象),看對象是否發生了改變。
用途:數據庫(使用引用完整性時保證更新順序、批量更新)、事務資源(調整消息隊列、事務監控)
.Net環境工作單元實現:使用無連接的數據集,每一行都有版本(當前版本、原始版本、建議版本)、狀態(不變、增加、刪除、修改)概念
2)使用時機:基本目的:記錄操作過的各種對象,以便知道為了使內存中數據與數據庫同步需要考慮哪些對象。
2. 標識映射通過在映射中保存每個已經加載的對象,確保每個對象只加載一次。當要訪問對象時,通過映射來查找它們。
鍵選擇:
數據表主鍵(或其他簡單的數據類型)
顯示的還是通用的(如findPerson(1),還是find("Person", 1)?):當所有對象鍵類型相同時使用通用的,其他情況下使用顯示的
數量(單映射、多映射):(沒看明白)
標識映射存放位置:有工作單元時,放在工作單元;沒有工作單元時,捆綁到會話的注冊表
2)使用時機:一般來說,用一個標識映射來管理所有修改了的數據庫讀出數據;
作為數據庫讀取操作的告訴緩存。
3. 延遲加載一個對象,它雖然不包含所需要的所有數據,但是知道怎么獲取這些數據
1)運行機制: 4種實現方法:延遲初始化:
實現思想:每次訪問屬性域都要先檢查該域是否為空。如果為空,在返回域值之前計算出這個域的值(注意這個域需要自封裝,即便是類的內部也只能通過它來訪問)
優缺點:簡單,但往往會在對象和數據庫間強加依賴關系
適用場景:活動記錄、表數據庫入口、行數據入口
虛代理:
定義:虛代理是這樣一個對象,它看起來應該是域中的一個對象,但實際上它并不包含任何東西。只有當他的一個方法被調用時,它才從數據庫加載適當的對象
優缺點:看上去完全就是需要的對象,但并不真的是那個對象,容易陷入標識問題;同一個實對象,可能有多個不同對象特征的虛代理(需要覆蓋Equals方法,而不用標識方法)
適用場景:數據映射器
值保持器:
實現思想:要想獲取某對象,可以訪問值保持器得到它的值,但只有第一次訪問值保持器時它才真正從數據庫讀取數據
優缺點:可避免標識問題;類需要知道值保持器的存在,喪失強數據類型顯式性;
重影:
實現思想:當從數據庫加載對象時,它只包含其ID。當每次要訪問某個域時,它就會加載其完全狀態(可以把域數據分為不同組,按需加載)
延遲加載的問題:
繼承(虛代理、重影,需要知道要創建什么類型的重影或虛對象);
波動加載(產生超出需要的數據庫訪問),影響應用程序性能(解決辦法:不適用延遲加載集合中的項,但集合整體可以延遲加載)
適用場景:面向方面的程序(將延遲加載置于一個多帶帶的方面,能獨立改變延遲加載策略)
2)使用時機:最佳時機:需要額外的調用,并且當使用主對象時所調用的數據沒有到的時候(取決于加載一個對象時需要從數據庫讀取多少數據和數據庫調用的次數)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30066.html
摘要:分層優缺點優點在無需過多了解其他層次的基礎上,可以將某一層作為一個有機整體來理解可以替換某層的具體實現,只要前后提供的服務相同即可可以將層次間的依賴性減到最低分層有利于標準化工作一旦構建好了某一層次,就可以用它為很多上層服務提供支持缺點層次 1. 分層優缺點: 1)優點: 在無需過多了解其他層次的基礎上,可以將某一層作為一個有機整體來理解; 可以替換某層的具體實現,只要前后提供的服務...
摘要:如果數據非常類似,可把數據從內存方案中轉化到邏輯數據存儲方案,映射從邏輯數據存儲方案到實際物理存儲方案第二部包含區別使用元數據元數據映射基于把映射濃縮到元數據文件的方法。元數據文件詳細描述數據庫中列如何映射到對象的域。 關系數據庫之所以取得成功,最重要的原因之一就是SQL的存在,它是數據庫通信標準語言。 1. 架構模式: 驅動領域邏輯訪問數據的方式: SQL語句嵌入在程序設計語言中; ...
摘要:領域模型應當使用細粒度的對象,這些對象應有細粒度的接口。它封裝了應用的業務邏輯事務控制及其操作實現中的響應協調。 1. 事務腳本 1)調用數據庫: 事務腳本將所有邏輯組成單個過程,在過程中直接調用數據庫,或者只通過一個簡單的數據庫封存器。 2)腳本處理: 每個事務都有自己的事務腳本,盡管事務間的公共子任務可以被分解成多個子程序。 3)運行機制: a.事務腳本應該置于與其他處理表現層和數...
摘要:架構設計實體化單元測試敏捷開發講究要快速的修改代碼,我們往往會發現,代碼修改的越頻繁,越多,這似乎是一個無法解決的矛盾。 本文由云+社區發表,作者:韓偉 互聯網開發的核心問題 當我1999年進入互聯網行業工作的時候,華為剛剛通過了著名的CMM認證。當時作為一個小程序員,非常向往業界經典的軟件開發模式。因為看上去,如果企業實行了CMM,我們程序員就不用再天天為了老板一個拍腦袋的主意而加班...
閱讀 1265·2021-09-27 13:35
閱讀 2563·2021-09-06 15:12
閱讀 3380·2019-08-30 15:55
閱讀 2829·2019-08-30 15:43
閱讀 432·2019-08-29 16:42
閱讀 3446·2019-08-29 15:39
閱讀 3062·2019-08-29 12:28
閱讀 1239·2019-08-29 11:11