嚶其鳴矣,求其友聲

2021-09-05 05:53:52 字數 1725 閱讀 9096

我在閱讀本書時,情不自禁地被放在書中每章篇首的實踐場景所吸引,甚至忽略了本書的重要內容,直接根據提示轉到下乙個章節的實踐場景,一氣呵成,直到將這些實踐場景閱讀完畢。作者揮灑自如的文筆,入木三分的人物刻畫,以及細膩含蓄的情感描寫,將我徹底吸引住了。在大結局中,孔如之與兒子在陽光中巴黎聖母院前的對話,讓人意猶未盡,似乎滿懷希望,卻又歷盡滄桑,真是讓我產生「情何以堪」的感慨。

以本書第4章為例。作者給出了乙個簡單的例項描述了框架構建的過程。首先從背景描述出發,展現了對保險業務中對保單進行處理的需求功能。這段背景描述將複雜的保險需求闡述得非常清楚而富有條理,體現了作者撰寫文件的高超能力。

接下來是作者對這一背景描述的抽象。這段抽象有理有據,較好地體現了從需求捕獲到分析的過程演變,利用抽象搭建了基本的領域模型。緊接著是對約束的思考,這是架構師必須完成的工作。根據對需求的抽象和關於約束的思考,就能夠做出合理的架構決策。作者在本書中反覆強調的「使用自然語言和講故事的方式」,通過例項得到了具體的展現。事實上,在joel on software一書中,joel spolsky也提出了同樣的觀點,認為通過講故事的方式描述用例場景,可以更好地促進理解與交流。本書作者擴大了這種方式的應用範圍,引入到架構設計過程中。對這一做法,我深表贊同。事實上,我在架構過程中,也常常採用類似手法,通過在文件撰寫設計的故事場景,幫助我梳理設計思路,有時候,甚至在文件中自問自答,在這樣的編寫過程中我慢慢找到了解決方案。

本書對領域模型的討論也有著個人獨到的見解。例如他對靜態模型和動態模型的分類,又例如他提出了使用貧血模型的好處。在martin fowler提出貧血模型之後,業界曾經掀起過對貧血模型與充血模型的爭論。然而,爭論到了最後,也沒有乙個確切的結果。從經典的oo原則來看,它要求將物件的資料和行為組織在一起,這正是批判貧血物件的主要論據。我比較傾向於這個觀點,認為物件沒有行為,就是「死」的,缺乏自治的能力。但在實際開發過程中,我也常常體會到貧血模型的好處,尤其是在模型重用與解耦方面,貧血模型都有其顯著的優勢。本書作者認為,貧血模型的「第乙個好處是,有利於資訊交換。第二個好處是,清晰了物件的職責。第三個好處是,實體物件(貧血物件)的實現更加靈活。第四個好處是,可以確保實體物件(貧血物件)只能在記憶體中用於計算。」這些好處都說到了點子上。雖然,我對於貧血物件的使用仍然抱有謹慎態度,但本書對此的闡述依舊給我提供了不錯的參考。

在專案管理方面,書中強調了「負責制度」的實施。這首先關係到責任定位的問題。專案延遲或失敗,究竟是專案管理的問題,還是架構設計的問題?是編碼實現的問題,還是測試維護的問題?作者認為,負責制度的缺失可能會影響專案的質量。書中提到:「在軟體開發過程中,人是最重要的因素,而責任、權利和利益是保證這個因素發揮作用的關鍵。」「建立負責制度的目的,不是為了懲罰某人,也不是為了永久取消某人的職業發展權利,它只是通過責任人利益損失的形式,來表明這樣乙個事實:沒有金剛鑽,別攬瓷器活。」事實上,負責制度的關鍵不在於制度的確立,而在於執行。如果沒有建立公平、公開、公正的執行環境,這種制度只會給軟體開發帶來負面影響。這也是作者僅僅提出問題,卻沒有給出好的答案原因所在。相對而言,我個人更傾向於scrum「回顧會議」,在基於迭代與漸進式開發的基礎上,這種方式更能夠有效解決專案開發中存在的問題。

倘若是新手閱讀本書,由於缺乏足夠的工作閱歷與開發經驗,很難理解作者寫作的意圖。但我們絕對不能因為這種認識上的障礙,而將本書拒之千里之外。事實上,越早閱讀本書,越能夠開拓讀者的眼界,提前感受業界的真實與謊言,反而能夠幫助新手更快地確立自己的職業生涯規劃。對於混跡行業多年的老鳥而言,閱讀本書,一定能找到那些似曾相識的畫面。作者對技術的深入**,也一定能給予我們啟發,即使觀點不同,也可以求同存異。所謂「嚶其鳴矣,求其友聲」,這是我在閱讀本書時收穫的如遇舊友般的快樂!

嚶其鳴矣,求其友聲

我在閱讀本書時,情不自禁地被放在書中每章篇首的實踐場景所吸引,甚至忽略了本書的重要內容,直接根據提示轉到下乙個章節的實踐場景,一氣呵成,直到將這些實踐場景閱讀完畢。作者揮灑自如的文筆,入木三分的人物刻畫,以及細膩含蓄的情感描寫,將我徹底吸引住了。在大結局中,孔如之與兒子在陽光中巴黎聖母院前的對話,讓...

鍊錶相交及求其交點

題目 判斷兩個鍊錶是否相交,如果相交,計算交點 void find two list intersection pstu head1,pstu head2 while tail2 if pcur1 pcur2 若尾指標相同則相交 pstu p1 len1 len2 head1 head2 p1指向較...

廣義表的建立及求其深度

include include include typedef enumelemtag struct node struct node tail char a 100 int len,time int max 0 struct node dfs int step t struct node mall...