簡單介紹di注入

c#di 注入有三種生命週期,Transient,Scoped,Singleton,如下表所述 生命週期 描述 使用時機 Transient 每次注入都會建立一個新的實例。 適用於輕量級且無狀態的服務。 Scoped 從 request 進來到回傳 response 期間每次注入都是共用相同得實例 適用於需要在單一請求中共用狀態的服務,例如資料庫上下文。 Singleton 當應用程式服務啟動時,只會建立一個實例,直到該服務關閉 適用於需要在應用程式中共用狀態的服務。 個別的使用時機是什麼時候? Transient:適用於輕量級且無狀態的服務,例如寄信服務。 Scoped:適用於需要在單一請求中共用狀態的服務,例如資料庫上下文。一般使用三層架構時,Controller、Service 和 Repository 通常會使用 Scoped。 Singleton:適用於需要在應用程式中共用狀態的服務,例如配置設定或日誌記錄。連線字串也應該使用 Singleton 生命週期,確保在應用程式的整個生命週期內是唯一且一致的。 為什麼要用 DI 注入 依賴注入(Dependency Injection, DI)是一種設計模式,用於實現對象之間的鬆耦合。使用 DI 有以下幾個好處: 解耦:DI 使得類之間的依賴關係變得明確,減少了類之間的耦合度。這樣可以更容易地替換和測試各個組件。 可測試性:通過 DI,可以輕鬆地將依賴項替換為模擬對象(Mock),從而進行單元測試。這使得測試變得更加簡單和可靠。 可維護性:DI 使得代碼結構更加清晰,依賴關係更加明確,從而提高了代碼的可維護性。當需要修改某個依賴項時,只需修改注入的配置,而不需要修改使用該依賴項的代碼。 可重用性:通過 DI,可以將通用的依賴項提取出來,實現代碼的重用。這樣可以減少重複代碼,提高開發效率。 靈活性:DI 允許在運行時動態地注入依賴項,從而提高了應用程式的靈活性和可配置性。

November 12, 2024

請簡單介紹什麼是索引

以 mssql 為例子,索引主要區分叢集索引與非叢集索引,我們可以用一本書來做範例,這本書可以當作是一張資料表,目錄就可以當作是一個叢集索引,附錄就可以當作是一個非叢集索引。 叢集索引 叢集索引會將資料依照索引排序與儲存,因為資料只能有一種排序,所以每張表只能有一個叢集索引。 當資料表有包含叢集索引時資料才會以排序方式儲存,如果沒有則會存在未排序的結構中,又稱為堆積 非叢集索引 非叢集索引的排列順序不會影響實際資料的排列方式,所以每張表可以有多個非叢集索引 非叢集索引會有一個指標指向資料列,此指標稱為資料定位器,若該資料表是堆積(沒有叢集索引)則資料定位器會指向資料列,若是叢集資料表,則資料定位器會指向叢集索引鍵。 為什麼叢集索引比非叢集索引快? 因為非叢集所以是指向記憶體地址,而非實際存放的位置 什麼是 b-tree,如果從 1-10 怎麼排列?什麼又是 b+ tree? 以後再補 有使用過複合索引嗎?幫我簡單介紹 是將多個 key 值組合成索引鍵,例如(A+B+C)是一個複合索引,但需要注意的是最源頭的 A 一定要在查詢條件內才會使用的該索引 使用複合索引 A,A+B,A+B+C,A+C 未使用複合索引 B,B+C,C 什麼是含有資料行的非叢集索引? 在建立非叢集索引時,將所需要的欄位放入非叢集索引內,例如 A 是非叢集索引將 B,C 包含在 A 之中,則當查詢條件是 A 的時候,所要取得的資料欄位如果只有 A,B,C 可以增加效率 如果查詢條件多了一個 D 會需要額外的成本將 D 資料取出。 參考 SQL Server 及 Azure SQL 索引架構與設計指南 叢集與非叢集索引 索引是什麼 ? 為什麼加了索引查詢會變快|| What is indexing ? How the indexing makes SELECT queries faster?

October 24, 2024

Dockerslow

dotnet 6 部署到docker忽然變很慢 最近在公司將dotnet 6 用docker-compose部署到測試機時忽然要等3-5分鐘,最後查證是因為我們在linux環境上有做mount遠端磁碟造成部署時間過長 掛載的磁碟機沒有做資料夾分類所有檔案都在一個資料夾底下,在根目錄就有破百萬的檔案,導致container透過volume連到實體路徑時會讀取過久

May 5, 2024

2024年度目標

2024年度目標 學會使用copilot,增加coding效率 3月前使用flutter開發記帳軟體並且上架 7月前TOEIC金色證書 開始錄製廣播

January 9, 2024

資料庫分表

資料庫架構設計 架構演變 讀寫分離 當遇到資料庫瓶頸時,最簡單的做法是將資料庫做主從架構 主資料庫只有做寫入並同步資料到其他從資料庫,被同步的資料庫可以是n個只做讀取 垂直分庫 資料還是持續增長後,就到了要做垂直分庫的架構了,垂直分庫的意思可以想像成將同一個資料表內的資料欄位做整理,分成多個資料庫,也就可以將不同資料庫放在不同機器上。 資料庫分成使用者資料庫、訂單資料庫、商品資料庫 水平分庫 資料量再更大量,最後的解決方案就是水平分庫,會將相同的資料表分成多個表 table01、table02、table03 Sharding中介軟體 要做到水平分庫會建議使用已經發展成熟的Sharding中介軟體 Sharding架構 有區分成兩種 Porxy架構 應用集成架構

June 4, 2023

First

Ha Today is a good day

May 19, 2023