看板 Soft_Job 關於我們 聯絡資訊
※ 引述《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