日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET仓储模式高级用例

發布時間:2025/7/14 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET仓储模式高级用例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
\

主要結論

\\
  • 如果需要執行基本CURD之外的其他操作,此時就有必要使用倉儲(Repository)。\\t
  • 為了促進測試工作并改善可靠性,應將倉儲視作可重復使用的庫(Library)。\\t
  • 將安全和審計功能放入倉儲中可減少Bug并簡化應用程序。\\t
  • 對ORM的選擇不會限制倉儲的用途,只會影響倉儲承擔的工作量。\
\\

在之前發布的文章使用實體框架、Dapper和Chain的倉儲模式實現策略中,我們介紹了實現倉儲所需的基本模式。很多情況下,這些模式只是圍繞底層數據訪問技術,本質上并非完全必要的薄層。然而通過構建這樣的倉儲將獲得很多新的機會。

\\

在設計倉儲時,需要從“必須發生的事”這個角度來思考。例如,假設制訂了一條規則,每當一條記錄被更新后,其“LastModifiedBy”列必須設置為當前用戶。但我們并不需要在每次保存前更新應用程序代碼中的LastModifiedBy,可以直接將相關函數放在倉儲中。

\\

通過將數據訪問層視作管理所有“必須發生的事情”細節的獨立庫,即可大幅減少實現過程中的錯誤數量。與此同時可以簡化基于倉儲構建的代碼,因為已經不再需要考慮“記賬”之類的任務。

\\

注意:本文會盡量提供適用于實體框架(Entity Framework)、Dapper和/或Tortuga Chain的代碼范例,然而大部分倉儲功能均可通過不依賴具體ORM的方式實現。

\\

審計列

\\

大部分應用程序最終需要追蹤誰在什么時間更改了數據庫。對于簡單的數據庫,這是通過審計列(Audit column)的形式實現的。雖然名稱可能各不相同,但審計列通常主要承擔下列四個角色:

\\
  • 創建者的User Key\\t
  • 創建日期/時間\\t
  • 最后修改者的User Key\\t
  • 最后修改日期/時間\

取決于應用程序的安全需求,可能還存在其他審計列,例如:

\\
  • 刪除者的User Key\\t
  • 刪除日期/時間\\t
  • [創建 | 最后修改 | 刪除] 者的Application Key\\t
  • [創建 | 最后修改 | 刪除] 者的IP地址\

從技術角度來看日期列很容易處理,但User Key的處理就需要費些功夫了,這里需要的是“可感知上下文的倉儲”。

\\

常規的倉儲是無法感知上下文的,這意味著除了連接數據庫時絕對必要的信息,倉儲無法獲知其他任何信息。如果能正確地設計,倉儲可以是徹底無狀態(Stateless)的,這樣即可在整個應用程序中共享一個實例。

\\

可感知上下文的倉儲略微復雜。除非了解上下文,否則無法創建這種倉儲,而上下文至少要包含當前活躍用戶的ID和Key。對于某些應用程序這就夠了,但對于其他應用程序,我們可能還需要傳遞整個用戶對象和/或代表運行中應用程序的對象。

\\
Chain
\\

Chain通過一種名為審計規則(Audit rule)的功能為此提供了內建的支持。審計規則可供我們根據列名指定要覆蓋(Override)的值。該功能包含了拆箱即用的基于日期的規則,以及從用戶對象將屬性復制到列的規則。范例:

\\\dataSource = dataSource.WithRules(\ new UserDataRule(\"CreatedByKey\

總結

以上是生活随笔為你收集整理的.NET仓储模式高级用例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。