.NET 應用架構指導
查詢
查詢是資料訪問層中主要的操作。他們是將應用的請求翻譯為對資料庫的CRUD行為。因為查詢如此關鍵,應該優化它們,來最大化資料庫的效能。可以參考下面的設計原則:
- 使用引數化的SQL查詢,可以減少安全問題,減少SQL隱碼攻擊。不要使用使用者輸入的內容進行字串的拼接。
- 考慮使用物件建立查詢。例如:實現查詢物件模式,或者使用ADO.NET支援的引數化查詢。考慮為查詢的執行優化資料庫的資料結構。
- 在動態構建SQL查詢的時候,避免混入業務邏輯,使用邏輯生成SQL語句,會導致難以維護和除錯。
儲存過程
在過去,和動態SQL相比,儲存過程代表效能的提高。但是,現在的資料庫引擎,儲存過程和動態的引數化的SQL執行的效能差不多。考慮使用儲存過程的主要因素是,抽象,可維護性,和你的環境。出於安全和效能考慮,使用儲存過程,避免在儲存過程中動態拼接SQL。引數會影響對快取的執行計劃的使用,而不是重新建立一個執行計劃。當引數型別和數量改變的時候,會產生新的執行計劃,會降低效能。可以參考下面的設計原則:
- 使用特定型別的引數作為儲存過程的輸入引數,返回單個值。考慮使用xml格式傳遞列表。不要為了顯示,而在儲存過程中格式化資料。相反,返回適當的資料,在表現層進行格式化。
- 如果非要在儲存過程中動態生成SQL,使用引數或者是資料庫變數。但是要記住,在儲存過程中動態建立SQL會影響效能、安全和可維護性。
- 避免在處理資料的時候建立臨時表。但是,如果非要使用臨時表,考慮將他們建立在記憶體中,而不是硬碟上。
- 實現適當的異常處理,給應用返回可以處理的程式碼。
儲存過程 VS. 動態SQL
這裡所說的動態SQL,指的是在程式碼中動態生成SQL,而不是說在儲存過程中動態生成SQL。在選擇兩者的時候,你一定要考慮抽象的需求,可維護性,和環境的限制。另外,兩者的選擇還要考慮開發者的偏好和技術特點。
使用儲存過程的主要優點是,對於資料庫,提供了一個抽象層,當資料庫改變的時候,最小化對於程式碼的影響。安全很容易實現和管理,因為你可以限制對儲存過程的訪問,使用大多數資料庫都提供的安全特性可以實現細粒度的管理。
使用動態SQL的主要優點是,他們比儲存過程更靈活,可以快速開發。很多ORM框架都會給你動態生成查詢語句,可以減少開發的程式碼編寫量。
選擇的時候,可以參考下面的設計原則:
- 如果你的應用很小,單一的客戶端,很少的業務邏輯,動態SQL通常是較好的選擇。
- 如果你的應用較大,有多個客戶端操作,需要考慮抽象需求。考慮使用儲存過程,或者是用ORM工具提供的查詢。
- 對於資料密集的操作,儲存過程允許你更加貼近資料,可以提高效能。
- 如果為了在資料庫改變的時候,最小化程式碼的改變。考慮通過儲存過程訪問資料庫。可以將資料庫的改變分離處理,可以優化儲存過程。
- 考慮你的開發團隊。如果團隊對資料庫不是很熟悉,考慮使用工具或者是和你的團隊更加匹配的模式。
- 在考慮使用動態SQL的時候,你應該理解資料庫的改變對程式碼造成的改變。你應該實現資料訪問層,從業務邏輯層解耦出來,專門執行資料庫查詢。
- 考慮除錯支援。動態SQL對開發者來說容易除錯。
事務
如果事務包括的所有資訊和行為都執行完畢,事務才算是完成,對資料庫的改變是永久的。在資料庫操作發生錯誤的時候,事務支援回滾,可以保持資料庫資料的一致性。
確定適當的併發模型,和確定如何管理事務是非常重要的。在併發的時候,可以選擇樂觀鎖,或者是悲觀鎖。樂觀鎖,在資料上沒有鎖,由程式碼檢查更新,通常使用一個時間戳,資料從上次獲取之後沒有被修改。在悲觀鎖中,鎖定資料,不能被另外一個操作更新,直到資料被解鎖。
可以參考下面的設計原則:
- 考慮事務的邊界,在需要的時候使用事務。在SQL Server中,每一個SQL預設就是一個事務。
- 在使用了鎖的事務中,儘可能的減少執行時間。避免在需要長時間執行的事務中使用鎖,避免在訪問共享資料的時候使用鎖。避免大量的使用鎖,可能會造成死鎖。
驗證
設計一個有效的輸入和資料驗證策略,對於系統的安全性是非常關鍵的。需要驗證從其它層或者是第三方元件提供的資料,對於從資料來源獲取的資料也要驗證。可以參考下面的設計原則:
- 驗證所有從外部呼叫而來的資料。確保你正確的處理了null值,過濾了非法的字元。
- 考慮驗證的目的。例如:在使用使用者的輸入動態建立SQL的時候,應該檢查字元的模式,避免發生SQL隱碼攻擊。
- 如果驗證失敗,返回有用的錯誤資訊。
XML
對於互動性和維護性來說,xml非常有用。出於效能原因,在使用xml處理大量資料的時候需要小心。參考下面的設計原則:
- 考慮使用xml reader和writer讀寫xml格式的資料,尤其是對於大量的xml資料。如果你需要和一個關係型的資料庫互動,考慮使用支援這一功能的物件,例如ADO.NET中的DataSet。
- 考慮使用xml定義格式,為資料儲存和傳輸提供驗證。考慮為複雜的資料結構提供自定義驗證,但是,要記住驗證將會帶來效能損失。
- 在資料庫儲存xml格式的資料。如果你需要查詢xml資料,建立索引。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-664296/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [譯] 在 Kubernetes 之上架構應用架構
- 架構的思想與指導原則——架構師的思維架構
- 在 .NET Core 中應用六邊形架構架構
- .NET應用架構設計—重新認識分層架構(現代企業級應用分層架構核心設計要素)應用架構
- netty應用架構的一些設想Netty應用架構
- MicrosoftNet企業級應用架構設計(中)ROS應用架構
- .NET架構開發應知應會架構
- 設計和架構:業務開發指導原則架構
- 設計微服務架構前應該瞭解的 5 項指導原則微服務架構
- MVP應用架構模式MVP應用架構模式
- Android應用架構Android應用架構
- 用 VIPER 構建 iOS 應用架構(2)iOS應用架構
- SaaS架構:應用服務、應用結構設計架構
- X3架構應用架構
- Android架構系列-MVP架構的實際應用Android架構MVP
- iOS應用架構談:架構設計的方法論iOS應用架構
- Go net/http 超時指導GoHTTP
- 如何進行架構設計(一):制定戰略性指導方案架構
- Linux運維就業技術指導(九)期末架構考核Linux運維就業架構
- Google官方應用程式架構指南Go架構
- Vue底層架構及其應用Vue架構
- 如何應用雲架構DevOps?架構dev
- 應用架構圖的設計應用架構
- 應用架構指南全新發布應用架構
- 企業應用平臺架構架構
- iOS 應用架構現狀分析iOS應用架構
- Java應用架構的演化之路Java應用架構
- React應用架構設計指南React應用架構
- 解析 Facebook 的 Flux 應用架構UX應用架構
- java應用一般架構Java架構
- IT架構之IT架構模型——思維導圖架構模型
- iOS應用架構談(一):架構設計的方法論iOS應用架構
- 一文搞懂SaaS應用架構:應用服務、應用結構、應用互動設計應用架構
- 傳統應用系統架構向微服務應用架構升級的實戰案例微服務應用架構
- 程式猿吐槽,瞎指揮的領導和PowerPoint架構師架構
- 百萬年薪架構師之路:談應用系統架構設計架構
- 總結 - 設計模式,企業應用架構模式,架構模式設計模式應用架構
- IT架構之IT架構標準——思維導圖架構