非常偶然地學到了乙個概念,叫預構。接下來的時間,就對預構的各個方面做下簡單的**。
首先,我們先來看下什麼叫軟體預構。聽到軟體預構這個詞,相信很多人第乙個想到的詞都是「軟體重構」,我也不例外。但是這兩個詞完全是兩個概念。
重構是對乙個已完成的專案利用模式進行實際的設計,**上的修改。而預構是利用前人,或者曾經開發的經驗來進行現有軟體專案的開發。換句話說,預構是一種經驗流,每個人都在預構,只不過沒有接觸到這個詞罷了。只此而已。如果偏說預構和重構有什麼關係。我大概概括了下,就是預構的經驗是從重構中獲得的,預構可以減少重構的次數。
好了,解釋過了這個詞。我想我該對我這個系列的文章重新做下簡介了。與其說我是在討論預構,不如說我在談我對軟體工程各個流程方面不同的理解和思想。
廢話到此為止,現在開始正式的「預購」,在我的開篇文章中,主要就是說下「預構」的核心思想。
痛定思痛,學會了迭代-遞增。接下來的專案開始越來越成功,從需求,設計,甚至到小組成員培訓,一共算在內,往往可以超額完成任務。直到現在,我依然堅持著這樣的流程:需求-->第一次設計-->編碼-->**優化-->設計重構-->需求變更-->第二次設計-->改善設計-->編碼-->**優化-->設計重構...........
在《軟體預購藝術》中,引入了這樣乙個詞:極致——抽象化到極致,關注點隔離到極致,可讀性到極致。對其中的觀點,我並不完全贊同,下面僅陳述我的觀點:
1. 型別抽象極致化。我的意思是指初始化設計階段,每種資料型別盡量不要用int,double等實際型別表示。如age這個概念,恐怕用實體資料型別描述要花一番心思。不能太大,不能太小,不能為小數,在初始設計時,把精力花在這些細節上是不好的。就乾脆寫成age age更好些。等整體設計確定後再來關注這些細節。
2. 可讀性極致化。這點不用我多說,沒有誰愛看沒有任何編碼規範的**。我個人基本不用任何簡寫,寧可名字很長,至少以後看起來不用動腦筋,有了智慧型感知,我也不用擔心拼寫錯誤的問題。
3. 物件導向適度化。在初學設計模式時,處處設計,樂此不疲。但在實際專案中,過度抽象,過度物件化並不是件好事。抽象是為了變化,沒有了變化就不要費力去抽象。
最後,再套用一句話:「情境就是一切」。在山路上開著法拉利跑車不會被人羨慕,只會被人罵做神經病。乙個優秀的軟體設計,架構師最大的優勢不在於他們的技術,而是他們的隨機應變的能力,也就是經驗流,回到主題,也就是「預構」能力!
CSS基礎(一) 開篇
背景 html是一種超文字標記語言,用來定義文件的結構和內容,例如標題 段落和列表等等,而文件內容如何渲染 如何展示,這就需要樣式來修飾了。css正是可以與html很好地結合。如果將html比作水,那麼css就是水杯,用怎樣形狀的水杯來裝水,水就顯示不一樣的形狀。什麼是css?css 指層疊樣式表 ...
C 底層機制(一) 開篇
很少有人質疑c語言生成 的高效和精悍,然而c 究竟能多麼接近c語言的水平呢?相信長期以來存在這樣的共識,核心演算法為了效率常常拋棄c 而使用c,他們認為c 龐大又遲緩,比如他們拒絕使用c 編寫資料庫引擎,他們說 繼承和過載降低效率,並且c 揹著你做很多事情 我相信通過之後的一系列文章,會幫助您破除圍...
linux驅動實踐 一 開篇
gnu arm彙編 系列寫了不少,收穫亦不小.依然還有很多可以繼續往下寫 一直想利用arm9的mmu寫個小的os 包含簡單裝置模型,任務排程和記憶體管理的os,網路和檔案系統就不要了.這個想法先放一下.另外對於uboot這樣乙個優秀的開源 也想做個深入的分析,但考慮到自己的bootloader也能引...