[系統設計]- 容易產生設計盲點

正確的設計: 理應是設計出一個不是最差的架構,而不是要試圖設計一個最好的架構 (Never shoot for the best architecture, but rather the least worst architecture)。

錯誤:用越多 Pattern 就越猛

正確的設計: 理應是設計出一個不是最差的架構,而不是要試圖設計一個最好的架構 (Never shoot for the best architecture, but rather the least worst architecture)

在工作上時常會遇到 JR. 工程師剛上工就想要導入各種系統設計,但往往都無法被接受。原因通常不外乎是沒有延續本來系統的架構為理由,缺乏一制性等等。

要避免這種狀況,會有三個考慮的準則:

  1. 對於實際 feature 無關的考量特徵:

    指一些明確的設計特徵,像是 “效能,擴充性...” ,且通常會載明載 Spec 中

  2. 會直接影響到系統架構的考量特徵:

    指的是一些隱含式考量特徵,但這些不一定會被載明 spec 中,像是 安全性

  3. 達成系統運行

    這一類型是實際撰寫系統採用的設計,但原則上架構越簡單越好,只包含必要的架構

實際操作的時候,應該參考下列流程:

Read Requirements -> Extract needs characteristics -> pick must do characteristics

  • Read Requirements

    • 閱讀 Feature Requirements(實際商業需求) / non-feature (實際技術需求) 的需求,也或許可以產出隱含的需求。

      ex: non-feature 需求是像是 performance 等, 隱含需求像是 security 等等的

  • Extract needs characteristics

    • 除了要達到商業的目的之外,以及明確的需求之外,隱含的需求未必都要實作

  • pick must do characteristics

常用的系統Characteristics

System Domain Concern
Architecture characteristics

Mergers and acquisitions

Interoperability, scalability, adaptability, extensibility

Time to market

Agility, testability, deployability

User satisfaction

Performance, availability, fault tolerance, testability, deployability, agility, security

Competitive advantage

Agility, testability, deployability, scalability, availability, fault tolerance

Time and budget

Simplicity, feasibility

Reference

[1] Fundamentals of Software Architecture: An Engineering Approach, Mark Richards & Neal Ford

Last updated