Kent Beck Implementation Pattern Value & Principle

Z-xuan Hong
4 min readDec 8, 2019

--

在上一篇文章提到了Kent Beck認為的Value與Principle,也介紹了其中一個Principle: Local Consequence,今天想要解釋一下Value與Principle之間的關聯。

Value:the regard that something is held to deserve; the importance, worth, or usefulness of something.

以白話文翻譯:Value是一種我們認為應該要專注的事物(ex: 溝通),且需要確認是否有確實被實踐,而且認為這些事物是重要的、有價值的、有用的。

Principle:a fundamental truth or proposition that serves as the foundation for a system of belief or behavior or for a chain of reasoning.

以白話文翻譯:Principle是一種核心的真理,當我們有很多選擇不知道該怎麼處理時,能夠變成我們抉擇的基礎。

而Kent Beck認為Value太過於抽象,而且難以應用,所以需要Principle的協助我們理解Value的動機。

而Pattern的背後通常都隱藏一些Principle,透過釐清Principle我們才不會在一大堆的Patterns裡迷失了自己,因為我們知道哪些適合哪些不適合。(可以藉由Principle來幫助我們決定使用哪些Pattern,而且也能幫助我們達到我們認為重要的Value)

舉個例子:假設Value: Communication是我們認為有價值的,我們就會有個相對應的Principle: 當遇到問題時先跟團隊討論,而不是自己埋頭硬幹

當我們遇到問題時,通常會有多種解決辦法:

  • 自己想辦法Google解決
  • 尋求團隊幫助
  • 擺爛不理他

那我們要怎麼選擇這些辦法?這時Principle就可以派上用場,我們的Principle: 當遇到問題時先跟團隊討論,而不是自己埋頭硬幹。

所以我們的選擇就會是尋求團隊幫助,而這樣的決定也會讓我們朝向Communication這個價值(Value),讓團隊都知道有這個問題存在,而不是自己解決,之後還可能會發生後續問題。

而在書中Kent Beck也提出他認為對程式有幫助的Value與Principle。

Value:Communication、Simplicity、Flexibility。

Principle:Local Consequence、Minimize Repetition、Logic and Data Together、Symmetry、Declarative Expression、Rate of Change。

這些都是他認為能夠讓程式變的容易溝通(Readibility),容易改變的價值與原則,所以當有很多不同的解法時(Alternative Practices),就能透過這些價值與原則來協助我們做決策。

書中提到,程式碼最大成本: 改變,要修改程式碼我們都知道,必須要先能夠讀懂程式的邏輯,如果讀不懂也沒辦法改變,所以可讀性是非常重要的(Value: Communication)

因此程式碼要能夠Communication Intention of Programmer,讓別人一看就能知道在解決什麼問題(Problem Statement)。而為了達到Communication的目的,程式碼要盡量朝著簡單的目標前進(Simplicity),而複雜的程式碼要能反映出是在解決複雜的問題,而不是炫技或是亂使用。

簡單的問題,如果用複雜的方法處理(ex: 簡單switch case的control flow,硬是修改成Strategy Pattern,且之後也不會改變),會讓程式碼溝通變得困難(可讀性降低)。如果不會改變,那使用複雜的解法通常是一種阻礙和浪費。

而最後一個Flexibility,Kent Beck認為我們太常使用彈性來當成差勁設計的藉口。我們應該在會改變的地方增加彈性,在不會改變的地方一昧增加彈性只是一種浪費,還會違反Communication和Simplicity的價值

我們應該使用會馬上帶來價值的Pattern,而不是使用未來可能會帶來價值的Pattern(Speculative design),當不確定是否會馬上帶來價值時,耐心是最好的策略。(愛要耐心等待,仔細尋找,感覺很重要…)

結論:要變成Kent Beck所認為的大師,感覺還有一段路要走~

--

--

Z-xuan Hong
Z-xuan Hong

Written by Z-xuan Hong

熱愛軟體開發、物件導向、自動化測試、框架設計,擅長透過軟工幫助企業達到成本最小化、價值最大化。單元測試企業內訓、導入請私訊信箱:t107598042@ntut.org.tw。

No responses yet