了解自己所設計的每一個環節,是確保設計品質的必要條件
如果你在實現 EP0 的腦內活動跟 EP1 的設計分享時,著手設計的是相對大的架構、又沒有相關經驗的話,很可能即使有了一個開頭,卻不知道該往什麼方向去發展才好。
實際上,設計架構往往不是無中生有的,可能大多數的需求都有既存案例或者是最佳化實踐可以提供參考。
尋求系統中的前例甚至是網路上由其他人實做過的架構來當成參考尤其對於剛開始做架構設計的成員們其實非常正常,我們不是一開始就什麼都知道的 ,而模仿,總是最快速的學習方式之一。
並且模仿除了有實體範例可以參考,更容易上手之外,有一個好處是你可以藉由已經完成的架構來一窺更高層次的整體樣貌是什麼模樣。
例如可能可以切分成幾層的 helper , model 怎麼去設計, view 跟 controller 怎麼和商業邏輯互動,如果你還不知道這些設計模式的存在,往往無法考慮到可以把它們應用到當下的專案之中,而最佳化實踐,可以幫你快速地拓展相關的眼界,讓你看到一個開頭。
為什麼說,是一個「開頭」?
把其他人的設計應用到自己的架構中,有一件很重要的事情務必要放在心上,「你應 知道所有 放進自己架構的內容,至少要了解作用、原理與納入架構的原因」。
不要過度的相信查到的甚至是系統中已經存在的架構的全部。
其他人的範例給你一個線頭,務必自己把整條線理解整理出來,才把它真正應用到設計之中。
實務上而言,在我們參考架構,並且建立自己的架構的時候,最好選擇從下而上,一步一步的把需要的部分放進來慢慢建構,這樣可能相對於從上而下,直接套用參考來的架構,一點一點拔掉不需要的東西,會比較慢,但是,可以避免很多不預期的情形發生。
再說一次,在我們設計架構的時候,很重要的事情是,你要了解你的架構的每一個環節背後的原因。
你要知道你所設計的架構在各種行為下的反應,還有更重要的是,為什麼要這樣反應,是一個合理的反應嗎?
如果我們過度參考其他人的架構,尋求速度而跳過了中間「了解每一個放進來的環節」的步驟的話,你很可能會在接下來遇到無數的被挑戰,「為什麼這裡會這樣?」但你可能沒辦法回答,因為這根本就不在預期的範圍之內,歐喔,這樣就有點糗了,不太好呢。
身為系統中的一部分,當你的架構造出來的功能可預測性越強,在維護性來說,就越好,更不容易出問題,當有狀況時也比較好找出發生的狀況。
而要設計一個更能夠被預測的架構,很重要的就是你要了解你所放進來的各個環節所負責的工作,將表現的行為。
寧可先造出一個看似很陽春,但一切都在預期內的架構,也不要一開始就把大雜燴給塞進系統之中,然後陷入無止盡的「為什麼這裡會這樣?」困境之中。
每當參考的架構中有哪一部分你不太熟悉的時候,先看懂,確認他是什麼樣的角色與環節,確認是需要的時候才把它放進實作之中。如果說發現根本是黑魔法一樣的部分,甚至建議初學者連用都不要用他。
與其神奇地,在不預期的情況下讓系統動起來,寧可他不會動,或是只能小小步地,但是在掌握中的動。
在工作環境的開發不是做作業,即使你身在一個快速迭代的新創環境,我也一樣會建議你,有時候慢慢來,比較快。
在一邊參考一邊設計架構的時候,可以先去找到參考的資料這沒有問題。
不過在更近一步要確認細節的時候,不要直接把參考來的內容放進架構之中,建議這個時候,可以總是從官方文件來確認相關的不論是套件還是設定,是不是符合你的需求,有沒有要注意的地方,有沒有甚至是違反你的需求的地方。
這在設計 scope 越大的架構的時候,越是重要,在一個複雜的架構你可能很容易就混進了你所不想要或者不預期的設計,也許先前的人有不同的需求,也許網路上的文章有不一樣的考量。
但是那些都不是你要考慮的問題。
專注在你所需要,所知道的部分來挑選,甚至是重新設計你的架構,才不會不小心掉入複製貼上的陷阱,才能夠像前面講的一樣,掌握你所設計的全部。
如果今天有部分的架構設計原因是,「因為我看到大家都這樣做」,嗯,聽起來相當不妙,一開始不知道這樣子設計的原因沒有關係,可是在你真的把它放進你所設計的架構之前,你一定要知道為什麼要這樣做。
更進一步,你應該要說得出自己的理由,想要這樣設計的理由,不論是對的還是錯的,是不是最佳的原因都好,你要對你自己的架構負上所有責任,所以至少,你自己應該要認為自己知道在做什麼。
我們可以做出錯誤的決定然後被糾正。
我們可以做出錯誤的決定然後在討論中找到更好的做法。
但是我們不要也不需要,因為不知道就草率做出設計與決定然後在稍後付出慘痛的代價。
嘗試去了解你所設計的每一個環節,弄清楚各個環節之間的互動,只要你知道為什麼,不論接下來需要做什麼調整,怎麼改動,都會是相對容易的。
有時候我們設計一個龐大的架構的時候,也許我們無法一步到位,因為未知的部分太多了。
這時候如果我們切分了小部分小部分來先著手進行,你更務必要掌握這些小部分的每一個環節,這也會給你自己很多的信心,在接下來小環節組合成中環節,中環節組合成大整體的時候,你知道你在每一個小環節都做對,就沒道理合起來會錯。
不然你自己都不知道其中有什麼東西的話,你就要走一步就回頭確認一下,走兩步回頭確認很久,走到最後還是不知道什麼是對的。
設計架構前不知道沒有關係,但是在設計架構出來的時候,你要知道自己到底設計了什麼,這非常重要。