作者bobju (寶貝豬)
看板Soft_Job
標題Re: [請益] 重構?標準?
時間Mon Feb 6 22:29:18 2012
※ 引述《markzog21 (殘羽星辰)》之銘言:
: 因為板上有在討論
: 而小弟最近也在看這方面的書(如果表達有誤請見諒XD)
: 突然有個疑問
: 我們常常覺得前人留下來的技術債很大
: 所以思考要重構
: 因此我們開始重新規劃整個系統
: 但會不會我們陷入了另一個陷阱
: 就是我們自認為此系統架構的最佳解
: 卻恰恰是下一個接手人覺得的"技術債"?
軟體架構發展到今日, 只有[比較好], 沒有[完美]的. 而且, 所
謂[比較好]的架構, 通常也得因應時空, 只限於某種應用領域,
或是某種管理或技術的需要, 不可能有全盤通吃的完美架構.
所以, 首先要打破的心結就是: 不要把[完美]當做現階段的目標.
不斷反覆地打破既有成規, 追求完美架構, 不計損益的思維, 比
較像藝術創作, 卻不符合商業運作的現實利益.
: 或許下一個接手人與我們自己的想法不同
: 於是我們想到的最方便解決的方式(也可能真的是不太好的方式)
: 就成為了下一個接手人心中罵聲連連的"技術債"?
如果前代是真的很用心在架構上, 後代應該不至於罵聲連連. 佩
服都來不及了, 怎麼還會罵? 就像是牛頓力學理論已架構的如此
地好, 愛因斯坦會因為提出更好的相對論解決了牛頓力學無法解
決的問題就罵牛頓嗎?
回歸正題: 任何時空都有其侷限, 你只能當下盡量把事情做到好,
卻不可能永遠都不變, 到了該汰換時, 還是會被汰換的.
: 一個好的系統架構uml應該不全然是教科書上面的教案範例
: 而是因時制宜的解決方案(這是小弟的拙見,如有不對請指教,但請手下留情...)
: 但其實我也不太知道
: 一個讓下一個接手的人感謝的系統架構
: 應該長什麼樣子
: 所以上板來詢問大家看看
: 怎樣的架構是
: 你曾經看到前人留下來讓你感謝不已的系統架構或解決方案?
一個好的架構要滿足策略性的原則如: 抽象化, 應變性, 擴充性,
這些原則, 讓它在後面不斷地擴充下還不會[崩盤], 真的需要相
當高段的功力, 這並非人人都能夠做到相當的水準.
比較基本, 而且有心就能夠做到的是: 良好的編程慣例, 交待清楚
簡明的文件, 可令人輕易舉一反三的良好範例等..讓後面接手的人
很容易就能上手可重複[應用]. 先能做到這裏, 我覺得就很不錯了.
: 還是說寫程式的人
: 寫的好是應該
: 寫不好就該...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.235.196.245
→ markzog21:可以再解釋輕易舉一反三的良好範例嗎?這方面不甚了解。 02/06 22:32
→ qrtt1:例子再怎麼弄也不會有書上完美,實際的情況要找到好例子得 02/06 22:37
→ qrtt1:蒐集多個改好的程式。而壞掉的例子很明顯的只要有sense都懂 02/06 22:37
→ qrtt1:local var scope 比 global 大 (比行數),這時你就不能單純 02/06 22:38
→ qrtt1:說 global evil,因為比 scope 小屋見大屋。 02/06 22:38
→ qrtt1:容易改的 bad smell,除了書上那些,基本上儘可能將 var 02/06 22:39
→ qrtt1:scope 降到合理的大小,所以 extract method 至少會有幫助 02/06 22:40
→ qrtt1:避免因為好寫的理由無盡控大 var scope,就是基本的防禦。 02/06 22:41
→ qrtt1:這些只是寫作習慣上的問題,但架構就不同了。他得一一例出 02/06 22:42
→ qrtt1:面對什麼問題,為什麼要用這種設計,導入設計會產生哪些新問 02/06 22:42
→ qrtt1:題。相比之下,那個方案產生的新問題較對少,或是利益相對的 02/06 22:43
→ qrtt1:大。重新review的人,可能沒機會有時間像設計者這樣思考過 02/06 22:43
→ qrtt1:單純評論眼前看到的設計,要挑出不順眼的地方是容易的。 02/06 22:44
→ qrtt1:所以,識貨的人,要能知道其他方法,並去比較哪一種優點較多 02/06 22:45
推 andymai:只能推了~守則上不可能全部都遵守~硬是要可以~只是拿石頭 02/06 23:31
→ andymai:砸自己的腳~再者~可能使用者一個額外需求就逼得要修改架構 02/06 23:33