原创 領域設計:聚合與聚合根

本文試圖回答如下問題: 什麼是聚合? 什麼是聚合根? 如何確定聚合和聚合根? Respository與DAO的區別 設計的表現力 《程序員必讀之軟件架構》一書在「軟件架構和編碼」一章有這麼一段話: 儘管很多人以組件來談論他們的軟件系統

原创 領域設計:Entity與VO

本文探討如下內容: 什麼是狀態 什麼是標識 什麼是Entity 什麼是VO(ValueObject) 在設計中如何識別Entity和VO 要理解Entity和VO,需要先理解兩個概念:「狀態」和「標識」!我們先來聊聊「狀態」! 狀態 大

原创 從單點到分佈式

本文梳理從單點到分佈式遇到的概念及問題,包括: 單點問題 主從 集羣 負載均衡 分佈式 分佈式理論:CAP,BASE 一致性:2PC,3PC,TCC,消息事務,Paxos,Raft 在架構風格:萬金油CS與分層中提到了CS架構風格。可以

原创 JDBC的架構設計

本文探討JDBC需要解決的問題及如何解決和設計的,包括: JDBC要解決的問題 數據庫事務 JDBC的架構設計 JDBC代碼注意點 Spring是如何處理事務 什麼是事務的傳播特性 Redis事務與數據庫事務的區別 問題 在《架構風格:

原创 非功能性約束之性能(1)-性能銀彈:緩存

在《什麼是架構屬性》一文中提到提高「性能」的主要方式是優化,而優化的其中一個主要手段就是添加緩存! 在軟件工程裏有這麼一句話:「沒有銀彈」!就是說由於軟件工程的複雜性,沒有任何一種技術或方法能解決所有問題!軟件工程是複雜的,沒有銀彈!但是,

原创 語言與模式-10裝飾模式

意圖 動態地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更爲靈活。 適用性 在不影響其他對象的情況下,以動態、透明的方式給單個對象添加職責。 處理那些可以撤消的職責。 當不能採用生成子類的方

原创 語言與模式-11橋接模式

意圖 將抽象部分與它的實現部分分離,使它們都可以獨立地變化。 適用性 你不希望在抽象和它的實現部分之間有一個固定的綁定關係。例如這種情況可能是因爲,在程序運行時刻實現部分應可以被選擇或者切換。 類的抽象以及它的實現都應該可以通

原创 語言與模式-15觀察者模式

意圖 定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時, 所有依賴於它的對象都得到通知並被自動更新。 適用性 當一個抽象模型有兩個方面, 其中一個方面依賴於另一方面。將這二者封裝在獨立的對象中以使它們可以各自獨立地

原创 語言與模式-08適配器模式

意圖 將一個類的接口轉換成另外一個客戶希望的接口。Adapter 模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。 適用性 你想使用一個已經存在的類,而它的接口不符合你的需求。 你想創建一個可以複用的類,該類可以

原创 語言與模式-05生成器模式

意圖 將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 適用性 當創建複雜對象的算法應該獨立於該對象的組成部分以及它們的裝配方式時。 當構造過程必須允許被構造的對象有不同的表示時。 Java實現 /

原创 語言與模式-17命令模式

意圖 將一個請求封裝爲一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支持可取消的操作 適用性 像上面討論的MenuItem對象那樣,抽象出待執行的動作以參數化某對象。你可用過程語言中的回調(c

原创 語言與模式-12享元模式

意圖 運用共享技術有效地支持大量細粒度的對象。 適用性 一個應用程序使用了大量的對象。 完全由於使用大量的對象,造成很大的存儲開銷。 對象的大多數狀態都可變爲外部狀態。 如果刪除對象的外部狀態,那麼可以用相對較少的共享對象取代

原创 語言與模式-09組合模式

意圖 將對象組合成樹形結構以表示“部分-整體”的層次結構。Composite使得用戶對單個對象和組合對象的使用具有一致性。 適用性 你想表示對象的部分—整體層次結構。 你希望用戶忽略組合對象與單個對象的不同,用戶將統一地使用組

原创 語言與模式-18狀態模式

意圖 允許一個對象在其內部狀態改變時改變它的行爲。對象看起來似乎修改了它的類。 適用性 一個對象的行爲取決於它的狀態, 並且它必須在運行時刻根據狀態改變它的行爲。 一個操作中含有龐大的多分支的條件語句,且這些分支依賴於該對象的

原创 語言與模式-07代理模式

意圖 爲其他對象提供一種代理以控制對這個對象的訪問。 適用性 在需要用比較通用和複雜的對象指針代替簡單的指針的時候,使用Proxy模式。下面是一些可以使用Proxy模式常見情況: 遠程代理(Remote Proxy)爲一個對象