閱讀筆記——架構漫談

Blue啊發表於2023-02-18

  今天閱讀了王概凱老師的架構漫談,裡面主要講解了他對架構等概念的理解。

  什麼是架構?

  架構就是根據要解決的問題,對目標系統的邊界進行界定,並把目標系統按某一原則進行切分,減少解決問題的成本,並對切分出來的部分建立溝通機制,使得這些切分出來的部分能組裝成一個整體。架構的產生就是因為早期個人同一時刻只能做有限的事情,但是一個人完成的生產遠遠不能滿足自己的需求,於是就產生的集體,出現了集體就會進行分工,分工就需要讓集體裡的每個個體都需要能發揮自己的優勢,產生最大的利益,由不同的卻色來完成這些分工,並建立不同部分互相溝通的機制,使得這些部分能有機的結合為一個整體,並王城整體所需要的所有活動,這就是架構。

  架構的產生是為了更高效的解決人的問題,但是高效解決問題的前提一定要搞清楚問題的主體,這樣才能確定問題的邊界。架構師都要有這個自覺:發現問題永遠都比結局問題來的更加重要。

  發現問題之後就是解決問題,就要對問題進行切分已達到更高效的解決問題。那麼要如何切分呢?首先我們要清楚一點,切分就是利益的調整,所有的切分調整都是對相關人的利益的調整,因為每個人的骨子裡都是維護自己的利益。所以切分的原則就是根據實際情況,按層切分,使得每個stakeholder的權責對等,每個stakeholder為自己的利益負責。但是要注意,切分時不能違法人性,所有的架構分析都應該是形成樹狀的,不應該變成有向圖,更不應該變成有向圖。

  回到軟體,我們首先要理解軟體的概念,王老師認為軟體就是人類日常生活的模擬,虛擬化。隨著人類生活的發展,軟體的規模也越來越大,做好一個軟體已經也變得越來越難,於是,程式的完成也變成了有許多不同角色的人共同合作來完成。軟體架構的出現也是同樣的。一開始是懵懵懂懂的去寫軟體,後來慢慢的就有意識的去切分,演變成了不同的架構。這個背後的動力也是一樣的,就是提升參與的人的利益,降低成本。導火索也是軟體工程師的任務太重,我們需要把很多工作拆分出來。拆分的原則也是一樣的,如何讓權責一致。同樣,這個拆分也是需要組織架構的調整,來保證架構的落地。軟體架構是為了更好的開發軟體,而軟體的本質,其實就是透過把人類的日常工作生活虛擬化,減少成本,提升單個人員的生產力,提升人類自己的利益。這與前面提到的架構是相同的。

  後面王概凱還談到了從架構的角度看如何寫好程式碼,他提到程式碼可明確的拆分為兩個不同的責任:表達業務邏輯的程式碼(Domain Model),對使用者提供分並儲存業務邏輯執行結果的程式碼。就是業務處理的程式碼和使用者互動結果的程式碼,所有的軟體都是這個樣子的,處理業務,響應使用者的請求。從架構的角度來看程式碼,我們想要真正快速的完成程式碼工作,就要克服自己對時間的恐懼,真正去研究業務的問題,相關stakeholder的利益。讓邏輯出現在邏輯該出現的地方,一旦不該出現的地方出現了邏輯,就要意識到這個地方是個坑。正確研究業務的問題,確定問題的邊界,讓開發變得清晰明瞭。

  最後就是技術,業務和架構的關係。在日常的開發過程中,經常會有人討論架構而實際是在討論技術,甚至在很多人的概念裡,架構和技術實際上是等同的。學會了幾種技術,就任務自己是架構師,覺得學習的技術越多,就覺得自己的水平越高。我自己以前也是這樣認為的。王概凱認為這實際上對幾種很不負責任,我們要清楚,任何技術都是為瞭解決某種問題而存在的,學會了技術,並不代表我們就能解決問題,習得的技術的多少隻是自己解決問題的手段多了一點。我們面對問題時,需要知道採用那種技術更好,這樣我們習得的技術才用到的刀尖上了。對於業務和技術,我們要清楚,技術是為瞭解決業務問題而產生的,技術與業務相伴相生,而架構就是不斷的更新解決業務問題的技術。所以架構師要具備準確採用什麼技術的能力,考慮長期的成本和利益。

相關文章