l

2018年3月1日 星期四

Clean Architecture(1):軟體架構的定義與目的

March 01 23:01~23:58

螢幕截圖 2018-03-01 23.57.25

▲佩納宮

定義

這學期開始在北科教軟體架構,使用《Clean Architecture》當作教科書,這一系列文章節錄Teddy認為的重點介紹給鄉民。

要談軟體架構,首先就要先知道軟體架構的定義。很多組織都有「架構」,例如公司組織架構、學校組織架構、政府組織架構,這些都是一般人類可以理解的架構。從這些架構著手,可以類推軟體架構的定義。

以中型公司組織架構為例,有董事會、董事長、董事會、總經理、處室、組等,以及各部門裡面的員工。由組織架構圖可以看出,所有的架構一定有三個東西:

  • 構成組織的單元:也就是不同職能的員工,在Clean Architecture中則稱為元件(component)。
  • 人員的安排:階層式、扁平式、矩陣式,component team還是feature team。在Clean Architecture中稱為元件的排列方式(arrangement)。
  • 人員溝通的方式:直接溝通、透過部門主管或PM與其他部門或外部客戶與廠商溝通、禁止溝通、聖上垂詢才可開口等。在Clean Architecture中稱為(communicate)。

Clean Architecture》的原文如下:

  • The architecture of a software is the shape given to that system by those who build it.
  • The form of that shape is in the division of the system into components, the arrangement of those components, and the ways in which those components communicate with each other.

軟體架構的定義很多,這可以算是Teddy看過最簡潔、清楚又實用的定義。

***

形狀與功能基本上無關

既然軟體架構是建構軟體的人所賦予它的形狀,那麼這個形狀的目的是什麼?假設你要蓋一個美術館,你會給這個美術館什麼形狀(外觀)?不少人可能聽過「Form follows Function」這個說法,形狀會跟隨著功能而改變,換句話說,軟體架構的形狀應該也會跟著功能(use case或user story)而改變。但實際在軟體架構領域中,一種廣為被接受的說法則是架構基本上與功能無關。實際上在真實世界中也是如此,下圖是用Google搜尋圖片下「美術館」關鍵字所找到的四個美術館,達到同樣的功能,但外型卻各異。


螢幕截圖 2018-03-01 23.36.23


那形狀的目的是什麼?依據《Clean Architecture》的說法,形狀的目的是為了幫助:

  • 開發(development)
  • 佈署(deployment)
  • 維運(operation)
  • 維護(maintenance )

換句話說,決定軟體架構的因素,主要是考量如何有助於軟體開發、佈署、上線營運以及日後的維護與功能擴充。

總的來說,軟體架構的終極目標可以簡化成以下兩點:

  • 最小化軟體生命周期的總成本
  • 最大化程式設計師的生產力

***

好的架構要反應功能

最後一個重要的觀念就是雖然架構的外觀與功能基本無關,但好的架構本身卻需要能夠反應系統的功能。《Clean Architecture》有個例子,你看到住宅的架構圖(平面圖),你會知道這個建築的用途是住宅,你看到圖書館的架構圖,你會知道這是一個圖書館。

回到軟體本身,試想一個Web購物網站應用系統,當開發人員打開程式,看到的是

tw.teddysoft.web

tw.teddysoft.controller

tw.teddysoft.domain

tw.teddysoft.database

類似這樣的架構組織關係,還是可以看出來系統有顯示產品列表、加入購物車、結帳、付款、選擇運送方式、追蹤訂單等功能?

為什麼好的架構要反應系統功能?因為這樣才可以協助開發、佈署、維運與維護。

***

友藏內心獨白:架構形狀與功能無關但架構內在要反應出系統功能。

沒有留言:

張貼留言