設計架構

Architecture is your design structure, and highlights the most important parts of your application, and the relationships between those parts.

架構是系統的組織結構,包含分解開的各個元件、元件間的關係、互動機制,以及系統設計中使用的原則及決策。

這次英文比中文好懂一點。

就我的理解,architecture 是整個軟體的結構,有點像骨架。其他那些 requirement、class diagram、design pattern、use case 等等東西就像軟體的,呃,肉(?),有骨架後就能把這些內容填進去。(寫到這裡開始懷疑我到底是怎麼理解這些概念的…)

設計 architecture 的階段會整理出那些 component 是重要的、建立處理順序,以及減少風險。

如何找出重要的事情?

可以問幾個問題:

  1. 它是系統本質的一部份嗎?
    可以用「如果沒有這個功能,這系統還會是它應該是的東西嗎?」來思考。
  2. 某個功能究竟是什麼意思?
    理解功能真正的意思,不懂就問客戶,或者任何要你做這玩意的人。盡量避免你以為你知道那是什麼但其實你不知道的狀況(繞口令時間)。
  3. 如何實作某個功能?
    挑出最困難的部分。不過一項實作困難程度會因人而異。

從誰開始?

找到最重要的幾件事情後,要決定從哪個部分開始。

這裡的重點是「減少風險」。只要能減少風險,從誰開始都可以。所謂風險,諸如 schedule 來不及、做出不是客戶要的東西等等。

在設計架構的階段要做可以減少風險的事,延後不能減少風險的事情。

如何減少風險?

  • 用 scenario 找出大部分的重要 requirement
    scenario 是穿過 use case 裡的一個路徑,也就是一段系統如何被使用的敘述。
  • 延後進入細節的時間,因為在架構階段進入細節無法減少風險。
    • 不要在架構階段寫詳細的 use case。
    • 延後細節的 coding
      可以先有個框,但不要開始寫邏輯細節。
  • 有好的 design
    • 一開始就把事情做對
    • 利用 commonality analysis(共通性分析)設計具有彈性的軟體
  • 搞不清楚意思或軟體要幹嘛時去問客戶,以降低做出不是客戶要的東西的風險。

寫好軟體的方式是先做好了解需求、規劃、組織、架構以及減少風險,盡可能延後 coding、避免在前期一頭栽進細節。