UUIDs&Uild 應用 UUIDs&Uild 應用 UUIDs 概念 UUID 出自 RFC 9562標準 可以保證跨空間與時間的唯一性,長度總共16bytes或128bits,表示隨機產生這些字串並在某些條件下保證不會重複,這種方式對分散式系統在建立物件ID的地方是很有效益,因為可以保證在分散式系統是唯一值或是保證碰撞的可能性較低,也常應用在微服務架構中。當產生一組隨機序號,字串其中中間4表示UUID的版本,9隨機亂數。 C#呼叫Guid.NewGuid()就是產生UUID字串的方式 範例: cb9ec1e3-0cb1- 4 e33- 9 ee1-e86b725964f8 UUID v4範例 for ( int i = 0 ; i < 10 ; i++) Console.WriteLine(Guid.NewGuid()) /* 輸出 cb9ec1e3-0cb1-4e33-9ee1-e86b725964f8 d7250a44-9ccf-4b21-af55-e13cef7bc09b 3793f197-2d7b-4cad-b5f3-2c88946feb97 08845d8c-cf31-4cc2-b4fb-c23d2426ec56 88bd93f7-116b-4418-8954-b116f2995ebf 2ac06c87-8e2d-4515-9d84-25ee324d9efd b9e911b0-a509-4d24-88ef-bc5739cc6024 91b2185c-92f7-4656-9bce-f9e0aba17181 7ca9976e-6cc4-424b-8453-2c591d9ba17f 1b4af183-d3cc-4571-b2c6-3b76a419b9c8 */ UUID 缺點 (1) UUID在資料庫insert會比較慢,如果大量寫入會很明顯 (2) UUID會造成index fragmentation, 因為UU...
C# DI 輕鬆學 C# DI 輕鬆學 DI 概念 IoC (Inversion of Control) - 控制反轉 定義:IoC 是一種設計原則,將對象的控制權從內部轉移到外部。具體而言,應用程式不再負責控制物件的建立與管理,而是將這些工作交給外部的容器或框架。 作用:通過將控制權反轉,可以讓應用程式更具彈性、更容易測試,並提高可維護性。 舉例: 傳統設計:類別 A 自行建立類別 B 的實例(new 關鍵字)。 IoC 設計:類別 A 的類別 B 由外部容器或框架提供,類別 A 不直接控制物件的建立。 DIP (Dependency Inversion Principle) - 相依反轉原則 定義:DIP 是 SOLID 原則中的一部分,主要指: 高層模組不應該依賴低層模組;兩者應依賴於抽象(介面或抽象類別),處處都介面。 抽象不應該依賴細節;細節應該依賴抽象。 目的:降低模組間的耦合性,使程式更靈活、更易於擴展。 舉例: 壞設計:類別 A 直接依賴類別 B。 好設計:類別 A 依賴於一個介面,由類別 B 實現該介面。 說明: 當使用 MSSQL 建立的 Repository 來存取資料表時,Service 類別會依賴該 Repository 類別進行資料操作。 也就是說,Service 與低層的 Repository 類別存在相依性。然而,假設有一天需要將 Repository 的實現改為使用 NoSQL 來存取資料,此時勢必需要重新改寫 Repository 的實作,而這種改變也會影響到 Service 類別的內部結構, 導致高層模組(Service)與低層模組(Repository)的耦合性過高。 為了解決這個問題,我們可以採用 DIP(依賴反轉原則) 的設計模式。在此模式下,我們會建立一個 IRepository 介面 ,定義高層模組與低層模組之間的契約。Service 類別只依賴於該介面,而不關心具體的...