Architecture

27 篇文章

🏗️

SnowFlake DistributionKey

Snowflake - Distribution Key

單體式 ID

一般單體式 UUID(Universally Unique identifier) 8-4-4-4-12 總共 32 個 16 進位

1
    UUID.randomUUID()  // …

BadSmell

Rigidity, 難以變更

任何變更, 都需要去改其他的東西, 造成一個小小的需求就要去更改另個很大的東西

Fragility, 容易壞掉

任何變更都會導致其他有相依或無相依的東西超出想象的破壞, 改一個小東西, 結果其他重要的東西壞掉

Immobility, 難以複用

系統中相依情況嚴重, 造成 …

UML

Instance Level

  • Dependency 依賴
  • Association 關聯
  • Aggregation 聚合
  • Composition 組合

Class Level

  • Implementation 實作
  • Inheritance 繼承

Dependency

1
2
3
4

虛線, …

SOLID 設計原則完整指南:物件導向程式設計的五大核心原則

深入解析 SOLID 五大設計原則,包含單一職責、開閉原則、里氏替換、介面隔離與依賴反轉的理論基礎與實戰應用

CQRS

CQRS (Command Query Responsibility Segregation)

  • Command: 命令
    • 會對系統產生『影響』的動作
    • 沒有『結果』回傳
  • Query: 查詢
    • 不會對系統產生『影響』的動作
    • 會回傳『結果』

CQS 原則的限制

當查詢所回傳的結果只有短暫的存 …

DesignPattern - Behavioral - Memento

Memento

當我們想要保存對象的狀態以便以後恢復它時,我們使用備忘錄設計模式。備忘錄模式有助於以這樣一種方式實現這一點,即對象的已保存狀態數據在對像外部無法訪問;這保護了已保存狀態數據的完整性。

實現 Memento 模式的想法始於兩個對象—— Originator …

DesignPattern - Behavioral - Interpreter

Interpreter

用它來定義一種語言的語法表示,它提供了一個解釋器來處理語法。這種模式的最佳示例是 java 編譯器,它將 java 源代碼解釋為 JVM 可以理解的字節碼。google translation 也是Interpreter 的一個例子,其中輸入可以是任何語言,我們可以得到另一種 …

DesignPattern - Behavioral - Iterator

Iterator

Iterator 是一種行為模式,使用它來提供一種標準的方式來遍歷一組對象。我們在 Java 集合框架中廣泛使用 Iterator,其中迭代器接口提供了遍歷集合的方法。 迭代的邏輯嵌入在集合本身中,它可以幫助客戶端程序輕鬆地對其進行迭代。Iterator 對象包含公共方法,以允許客 …

DesignPattern - Behavioral - Visitor

Visitor

當必須對一組相似類型的對象執行操作時,我們使用訪問者模式。借助 visitor pattern,我們可以將操作邏輯從對象轉移到另一個類。例如,考慮一個購物車,我們可以在其中添加不同類型的商品(元素),當我們點擊結帳按鈕時,它會計算出我們需要支付的總金額。現在,我們可以在項目類中包含計 …

DesignPattern - Behavioral - State

State

當對像在其內部狀態改變時改變其行為時,我們使用狀態設計模式。我們可以將對象的狀態定義為其在任何給定時間點的確切條件,具體取決於其屬性或屬性的值。一個類實現的一組方法構成了它的實例的行為。每當其屬性值發生變化時,我們就說對象的狀態發生了變化。

首次創建 Context 對象時,它會使用其初 …

DesignPattern - Behavioral - Command

Command

Command Pattern 是一種行為對象設計模式。在 Command Pattern 中,命令接口聲明了用於執行特定操作的方法。具體的 Command 類實現了 Command interface 的 execute()方法,這個execute()方法調用了具體 Command …

DesignPattern - Behavioral - Strategy

Strategy

當存在一組相關算法並且客戶端對象需要能夠從該組中動態挑選適合其當前需求的算法時,策略設計模式很有用。策略模式建議將每個算法的實現保留在一個單獨的類中。封裝在單獨類中的每個此類算法稱為策略。使用 Strategy 對象的對象通常稱為上下文對象。

當我們為特定任務有多種算法並且客戶端決 …

DesignPattern - Behavioral - Observer

Observer (pub-sub)

在觀察者設計模式中,多個觀察者對象向一個主題註冊以獲取通知中的任何更改。當主題的狀態發生變化時,它會通知觀察者。監聽或觀察變化的對象稱為觀察者,被觀察的對象稱為主體。

主題為觀察者提供了一個接口,可以在主題中註冊和註銷自己。 主題知道它的訂閱者是誰。 多個觀察者 …

DesignPattern - Behavioral - Chain Of Responsibility

Chain Of Responsibility

當有多個對象可以處理或滿足客戶端請求時,責任鏈模式建議給這些對像中的每一個以某種順序處理請求的機會。在這種情況下應用該模式,這些潛在的處理程序中的每一個都可以以鏈的形式排列,每個對像都具有對鏈中下一個對象的引用。鏈中的第一個對象接收請求並決定處理請求或 …

DesignPattern - Behavioral - Mediator

Mediator

Mediator 通過阻止對象顯式地相互引用來促進鬆散耦合,並且它允許您獨立地改變它們的交互。 我們使用中介者設計模式在系統中的不同對象之間提供集中的通信媒介。

中介者模式專注於在對象之間提供一個中介者進行互動,並幫助實現對象之間的丟失耦合。對像要求中介者代表它們進行交互,而不是直 …

DesignPattern - Behavioral - Template Method

Template Method

Template Method pattern 定義了操作中算法的骨架,將一些步驟推遲到子類。 Template Method讓子類在不改變算法結構的情況下重新定義算法的某些步驟。 可以在有算法的情況下使用Template Method pattern,其中一些步驟可 …

DesignPattern - Structural - Decorator

Decorator

Decorator 的主要目的是動態地為對象附加額外的職責。Decorator 為擴展功能提供了一種靈活的替代子類的方法。

當我們需要動態擴展對象的功能而無需更改原始類源或使用繼承時,Decorator 為我們提供了便利。這是通過在實際對象周圍創建一個稱為裝飾器的對象包裝器來實現 …

DesignPattern - Structural - Bridge

Bridge

在接口和實現中都有接口層次結構時,使用 Bridge 設計模式將接口與實現分離,並對客戶端程序隱藏實現細節。

根據 GoF 橋的設計模式是:將抽象與其實現分離,以便兩者可以獨立變化

將抽象及其實現分開,並為抽象和實現者開發單獨的繼承結構。抽像是接口或抽像類,同樣實現者是接口或抽像類。 …

DesignPattern - Structural - Facade

Facade

為子系統中的一組 interface 提供統一的入口。Facade Pattern 定義了一個更高級別的接口,使子系統更易於使用 Facade 並沒有封裝子系統類或接口;它只是為其功能提供了一個簡化的界面。 此外,客戶端可以直接訪問這些類。它仍然為可能需要它的客戶公開系統的全部功能。簡 …

DesignPattern - Structural - Flyweight

Flyweight

Flyweight 中,我們重複使用對象,而不是創建大量相似的對象。我們可以使用它來減少內存需求和實例化時間以及相關成本。

在我們應用 Flyweight 之前,我們需要考慮以下因素:

  • 如果應用程序中所需的對像數量巨大。
  • 如果對象創建佔用大量內存並且也可能很耗時。
  • 太多的對象會 …

DesignPattern - Structural - Proxy

Proxy

Proxy pattern 為另一個對象 create a representative object that controls access to another object。 事實上,Proxy pattern 是用來創建一個代表對象來控制對另一個對象的訪問。成本高或需要保護以至 …

DesignPattern - Structural - Composite

Composite

Composite 讓客戶可以統一處理單個對象和對象的組合,這就是 Composite Pattern 的意圖。 在復合模式中,存在一個樹結構,可以在葉子和節點上執行相同的操作。樹中的節點是可以有孩子的類。節點類是“複合”類。樹上的葉子是沒有孩子的“原始”類。 組合的子節點可以是 …

DesignPattern - Structural - Adapter

Adapter

將一個類別的介面 轉換成另一個類別的介面供客戶使用 讓介面不相容的類別可以合作

有時,可能會出現兩個對像不適合在一起的情況,或者在代碼中更改第 3 方 API 時,可能會出現這種情況。 顯然,這是由於兩個不適合在一起的對象的接口不兼容造成的。

正如適配器一詞所暗示的那樣,適配器設計 …

DesignPattern - Basic - Prototype

Prototype

一種對象創建機制。

假設有一個從 DB 加載數據的對象。現在,我們需要在程序中多次修改這些數據。因此,使用 new 關鍵字創建對象並再次從數據庫中加載所有數據並不是一個好主意。因此,更好的方法是將現有對象 clone 為新對象,然後進行數據操作。

但是,原型設計模式要求您正在復制 …

DesignPattern - Basic - Builder

Builder

對象構造的細節,實例化和初始化構成對象的組件,都保存在對像中,通常作為其構造函數的一部分。這種類型的設計將對象構造過程與構成對象的組件緊密聯繫在一起。但是,只要構造對像簡單,對象構造過程明確,並且總是產生對象的相同表示,這種方法就適用。

此外,當被創建的對像很複雜並且構成對象創建過程 …

DesignPattern - Basic - Factory

Factory

一個具有多個子類的父類別並且基於輸入,我們需要返回其中一個子類時,使用工廠設計模式。這種模式將類從客戶端程序實例化到工廠類的責任。 工廠模式中的超類可以是 interface,也可以是 abstract class,也可以是普通的 Java class。

 1
 2
 3
 4 …

Singleton 設計模式完整指南:單例實作與現代化最佳實踐

深入解析 Singleton 設計模式的各種實作方式,包含執行緒安全、反射攻擊防護與現代化最佳實踐