Top-down和Bottom-up設計方法 - 搞笑談軟工
文章推薦指數: 80 %
Top-down(由上而下)和Bottom-up(由下而上)是兩種設計與解決問題的技巧。
前者對問題先有一個整體的概念,然後再逐步加上設計細節,最後讓整體的 ...
l
網頁
首頁
泰迪軟體最新課表
泰迪軟體Facebook
搞笑談軟工Facebook社團
2014年3月26日星期三
Top-down和Bottom-up設計方法
Mar.1208:40~10:10Top-down(由上而下)和Bottom-up(由下而上)是兩種設計與解決問題的技巧。
前者對問題先有一個整體的概念,然後再逐步加上設計細節,最後讓整體的輪廓越來越清楚。
後者則是先將解決問題可能所需的基本元件、方案給準備好,然後再將這些基本元件組合起來,由小而大最後得到整體。
「由上而下」或「由下而上」這兩種解題方法,有時個別套用便可解決問題,有時則是在思考模式採取「由上而下」,把問題先分析、拆解之後,再採取「由下而上」的方式完成整體實作。
這兩個概念,其實很簡單,資訊相關科系大學生在學習程式設計的時候應該都會學到,沒什麼大不了的。
但是其實案情並沒有那麼單純。
Teddy在〈如何選擇第一個Pattern來設計軟體架構?〉提到:Alexander說,套用pattern形成patternlanguage的精神是一種「整體先於部分,然後透過差異化的過程將整體逐步展開」。
Alexander的patternlanguage設計方法就是一種「由上而下」的設計方法?鄉民們可能會想:「由上而下就由上而下,那又怎麼樣?」接下來看一下GoFDesignPatterns的設計方法。
ErichGamma(GoF的第一作者)在一次訪問中提到:Alexanderhadaveryambitiousgoalwhichwastocreatearchitecturesthatimprovethequalityoflife.ToachievethisAlexanderdevelopedapatternlanguage.Thisisasetofpatternsthatbuildoneachother.Apatternlanguageguidesadesigner'sapplicationofindividualpatternstotheentiredesign.Whenwestarteddesignpatternswewerenotthatambitious.Weusedamorebottom-upapproachbasedonmicro-architectures.以上這段英文請鄉民們花點時間稍微讀一下(保持原汁原味就不解釋了),接下來還有一段:Ratherthancomingupwithasetofinterwovenpatternstop-down,micro-architecturesaremoreindependentpatternsthateventuallyrelatetoeachotherbottom-up.Apatternlanguageguidesyouthroughthewholedesign,whereaswehavetheselittlepieces,bitesofengineeringknowledge.Iconfessthatthisislessambitious,butstillveryimportantanduseful.(註:micro-architectures就是designpatterns)***讀完這兩段英文句子之後,先有一個概念:Alexander的Pattern/PatternLanguage設計方法是一種由上而下的方法,而GoFDesignPattern是一種由下而上的方法。
鄉民甲:那又怎樣啦?!Alexander認為,如果要完成一個「整體性的設計」,無法經由「由下而上」的組合過程來達到。
因為如果沒有先具備「整體」的概念,則「由下而上」的過程最後組裝出來的產品或是設計很可能會「長歪掉」。
例如,你想要製造一朵真花,你必須從種子開始培育(由上而下)。
如果將花瓣、花蕊、花粉、花蜜等採用由下而上的方式組合起來,你只能得到一朵「人造花」。
在上面第一段英文句子裡面,Gamma說:「Alexanderhadaveryambitiousgoalwhichwastocreatearchitecturesthatimprovethequalityoflife.」Alexander的想法是希望設計可以達到QualityWithoutAName的境界,從而改善人類的生活。
因此Gamma說Alexander對於「設計」有一個雄心壯志的目標。
GoFDesignPattern則沒有那麼遠大的目標,主要的用途就是解決比較小的設計問題。
至於採用「由下而上」的方式套用了一堆DesignPattern之後所形成的「整體」長得如何,是否「完整」,則不是DesignPattern所能或所想要解決的問題。
這也是為什麼很多人,尤其是初學者,套用了一堆DesignPattern之後,雖然解決了一些特定的設計問題,但從軟體架構整體來看,設計的品質還有很大的改善空間。
***鄉民甲:所以Teddy你的意思是說GoFDesignPattern比較不好?達摩大師:無所謂好壞,端看造化而定。
Gamma自己評論說道:「Iconfessthatthisislessambitious,butstillveryimportantanduseful.」雖然GoFDesignPattern不像Alexander的PatternLanguage有那麼大的企圖心,但還是很重要且有用的方法。
鄉民甲:Teddy,你搞得我頭好痛啊。
GoFDesignPattern出版至今已快20年了,當初剛出版的時候軟體領域的Pattern被整理出來的還不夠多,無法形成一個「生態系」。
所以學習個別Pattern就好像是在「背單字」,至於可以用這些單字來組成何種概念,就只能「兄弟登山,各自努力」,交由個別程式開發人員自己去創造、發現。
有些人成功,可以用GoFDesignPattern做出很棒的設計,有些人比較不成功,GoFDesignPattern搞了很久,系統的軟體架構還是長得像「違章建築一樣」。
這20年來,軟體領域的Pattern越來越多,從分析、架構、設計、實作、測試、流程、介面設計等,各種尺度的Pattern已經很完備了。
把這「一拖拉庫」的Pattern全部視為一個整體然後由上而下,一個Pattern一個Pattern套用,就很接近Alexander的PatternLanguage的境界。
也就是說,在設計軟體架構的時候,可以靈活採用「由上而下」、「由下而上」,或是兩者合用的策略。
***GoFDesignPattern用了一陣子但是對於設計軟體架構還是覺得力不從心?此為正常現象,因為「DesignPattern就是只是DesignPattern,只解決較小尺度的軟體設計問題,並不是ArchitecturePattern」。
當「由下而上」的方法卡住時,可以考慮先跳到「半空中」,採取「由上而下」的角度來看問題,說不定卡住的地方一下子就豁然開朗。
***友藏內心獨白:我還是不明白啊…Orz。
張貼者:
TeddyChen
於
凌晨12:00
以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook分享到Pinterest
標籤:
軟工,
軟體架構,
軟體設計,
Patterns,
Programming
4則留言:
匿名2014年3月26日上午9:34不好意思,有一個小建議,就是引用的文字可以不要用斜體的,看起來比較舒服。
可以使用類似這樣的:http://css-tricks.com/examples/Blockquotes/回覆刪除回覆回覆TeddyChen2014年3月26日上午9:54您的建議非常好,因為我寫blog是使用WindowsLiveWriter,我沒特別研究怎麼在blog裡面去設定不同段落的顯示方式,所以就直接用最簡單的方式來撰寫。
傷到各位鄉民們的眼睛還請見諒.....Orz(我已經取消斜體字了)。
回覆刪除回覆回覆Unknown2014年3月26日晚上9:40我個人經驗是這樣.1.跨系統架構,著重各系統間的合作與整合,這部分用上很多Enterpriseintegration的相關知識,但是主要處理的大多是系統間的介面、資料流、匹配性(如8x5系統配24x7系統就不匹配),要用service還是queue,要怎麼redo這類。
2.系統內的設計,這部分會用上很多designpattern,我通常會畫個大概,根據複雜度定個大概的策略,稍微設計一下就開工了,但是這部份很取決於團隊的成熟度,如果是好手很多,我會放手給第一線的成員做設計,如果菜鳥居多,我會設計的仔細一點,甚至寫好pseudocode,也會盯設計盯得緊一點。
3.實作面的設計,這部分屬於cleancode,apidesign,implementationpattern和refactorskill,和codingguideline,namingconvention的範疇,其實做得好的人不多。
另外我認為從上而下的設計,那必須從需求開始,系統要怎麼滿足使用者?商業目的為何?這些問題不談清楚,沒有辦法由上而下。
一點淺見與同好分享。
回覆刪除回覆回覆Art2019年12月4日上午9:51WhyPatternsKeepCodeSimplehttps://levelup.gitconnected.com/why-patterns-keep-code-simple-b2abece11a98回覆刪除回覆回覆新增留言載入更多…
較新的文章
較舊的文章
首頁
訂閱:
張貼留言(Atom)
搜尋此網站
總網頁瀏覽量
關於
TeddyChen
檢視我的完整簡介
請幫Teddy按個讚^_^
標籤
工商服務
(93)
生活
(339)
改行寫網路小說算了
(23)
其他
(24)
客戶教我的事
(2)
持續整合
(29)
哲學
(13)
旅遊
(568)
視力測驗
(3)
軟工
(397)
軟體架構
(106)
軟體設計
(183)
最新課程
(81)
創業
(83)
測試
(94)
盡信書不如無書
(2)
需求
(22)
課程實錄
(22)
學習
(88)
貓
(15)
還少一本書
(36)
agile
(637)
C.C.Agile
(33)
DDD
(78)
DevOps
(3)
Eclipse
(6)
exceptionhandling
(84)
HCI
(44)
ImplementationPatterns
(5)
Kanban
(79)
Mobile
(2)
Patterns
(198)
Programming
(53)
Refactoring
(58)
Scrum
(461)
TDD/BDD
(42)
網誌存檔
►
2022
(28)
►
8月
(4)
►
7月
(18)
►
6月
(3)
►
3月
(2)
►
2月
(1)
►
2021
(27)
►
12月
(2)
►
10月
(1)
►
9月
(7)
►
8月
(1)
►
6月
(4)
►
4月
(1)
►
3月
(3)
►
1月
(8)
►
2020
(32)
►
12月
(4)
►
11月
(1)
►
10月
(1)
►
9月
(4)
►
8月
(4)
►
7月
(2)
►
6月
(2)
►
5月
(4)
►
4月
(3)
►
3月
(3)
►
2月
(3)
►
1月
(1)
►
2019
(50)
►
12月
(12)
►
11月
(2)
►
10月
(1)
►
7月
(1)
►
6月
(1)
►
5月
(8)
►
4月
(2)
►
3月
(8)
►
2月
(8)
►
1月
(7)
►
2018
(28)
►
11月
(1)
►
10月
(3)
►
9月
(2)
►
8月
(6)
►
7月
(6)
►
6月
(3)
►
3月
(3)
►
2月
(1)
►
1月
(3)
►
2017
(142)
►
12月
(12)
►
11月
(8)
►
10月
(3)
►
9月
(2)
►
8月
(15)
►
7月
(10)
►
6月
(14)
►
5月
(6)
►
4月
(8)
►
3月
(23)
►
2月
(16)
►
1月
(25)
►
2016
(301)
►
12月
(14)
►
11月
(19)
►
10月
(6)
►
9月
(18)
►
8月
(31)
►
7月
(31)
►
6月
(30)
►
5月
(31)
►
4月
(30)
►
3月
(31)
►
2月
(29)
►
1月
(31)
►
2015
(366)
►
12月
(31)
►
11月
(30)
►
10月
(32)
►
9月
(30)
►
8月
(31)
►
7月
(31)
►
6月
(30)
►
5月
(31)
►
4月
(30)
►
3月
(31)
►
2月
(28)
►
1月
(31)
▼
2014
(365)
►
12月
(31)
►
11月
(30)
►
10月
(31)
►
9月
(30)
►
8月
(31)
►
7月
(31)
►
6月
(30)
►
5月
(31)
►
4月
(30)
▼
3月
(31)
[2014]搞笑談軟工十大經典名片回顧
2013北京考察之旅Day3-D南鑼鼓巷瞎逛
2013北京考察之旅Day3-C孔廟
直接套用Pattern還是RefactoringtoPattern?
先學物件導向還是先學設計模式?
Top-down和Bottom-up設計方法
[工商服務]2014年5月Scrum課程開放報名
談談XP(3f):PrimaryPractice
2013北京考察之旅Day3-B國子監
2013北京考察之旅Day3-A秦晉麵食與故宮購票
如何學習GoFDesignPatterns?
談談XP(3e):PrimaryPractice
組織要如何解決更複雜的問題?
談談XP(3d):PrimaryPractice
你有在體驗嗎?
2013北京考察之旅Day2-F頤和園之諧趣園、大戲台
2013北京考察之旅Day2-E頤和園之蘇州街
談談XP(3c):PrimaryPractice
談談XP(3b):PrimaryPractice
[工商服務]2014年課程異動通知
談談XP(3a):PrimaryPractice
什麼是體驗設計?
2013北京考察之旅Day2-D頤和園之佛香閣
2013北京考察之旅Day2-C頤和園之石舫、長廊
這就是無名特質
神人降世!我怎麼就沒想過可以這樣子使用例外哩
什麼東西才是有三小路用呢?
[工商服務]敏捷體驗設計工作坊第二梯次
例外處理和設計模式
2013北京考察之旅Day2-B頤和園之昆明湖
2013北京考察之旅Day2-A頤和園之仁壽殿
►
2月
(28)
►
1月
(31)
►
2013
(365)
►
12月
(31)
►
11月
(30)
►
10月
(31)
►
9月
(30)
►
8月
(31)
►
7月
(31)
►
6月
(30)
►
5月
(31)
►
4月
(30)
►
3月
(31)
►
2月
(28)
►
1月
(31)
►
2012
(373)
►
12月
(31)
►
11月
(30)
►
10月
(31)
►
9月
(31)
►
8月
(31)
►
7月
(32)
►
6月
(31)
►
5月
(31)
►
4月
(30)
►
3月
(31)
►
2月
(32)
►
1月
(32)
►
2011
(120)
►
12月
(16)
►
11月
(10)
►
10月
(4)
►
9月
(3)
►
8月
(9)
►
7月
(15)
►
6月
(10)
►
5月
(6)
►
4月
(8)
►
3月
(16)
►
2月
(12)
►
1月
(11)
►
2010
(104)
►
12月
(4)
►
11月
(6)
►
10月
(10)
►
9月
(5)
►
8月
(4)
►
7月
(15)
►
6月
(19)
►
5月
(12)
►
4月
(8)
►
3月
(12)
►
2月
(2)
►
1月
(7)
►
2009
(31)
►
12月
(5)
►
11月
(10)
►
10月
(7)
►
8月
(1)
►
7月
(8)
►
2008
(6)
►
9月
(3)
►
3月
(1)
►
1月
(2)
►
2007
(4)
►
12月
(1)
►
6月
(3)
追蹤者
最新回應
載入中…
熱門文章
Scrum是什麼(4):ProductBacklog
January0308:46~10:35前情題要:〈Scrum是什麼(1):雙重回饋機制〉〈Scrum是什麼(2):Scrum的內涵〉〈Scrum是什麼(3):三種補充文件〉***前幾集介紹了Scrum雙回饋機制與Scrum...
誰失敗?
Sep.1008:15~10:30 昨天的〈不是Scrum也不是Kanban的問題,是Story有待加強〉這一篇,才剛「上架」沒多久就有一位鄉民留言:匿名2014年9月1日上午12:36這跟邪教有什麼不一樣宗教本身都不會失敗,失敗的都是人?那還要宗...
發票掉了怎麼報帳?
March2921:26~22:35▲畫面節錄自Google搜尋「發票」結果 發票掉了怎麼報帳?答案當然不是「撿起來」那麼簡單。
事件一成立泰迪軟體之後公司的帳務都是委由當初北科大育成中心所介紹的會計師負責,Teddy只要每個月把發票寄給會計師即可,...
Top-down和Bottom-up設計方法
Mar.1208:40~10:10Top-down(由上而下)和Bottom-up(由下而上)是兩種設計與解決問題的技巧。
前者對問題先有一個整體的概念,然後再逐步加上設計細節,最後讓整體的輪廓越來越清楚。
後者則是先將解決問題可能所需的基本元件、方案給準備好,然後再將這...
什麼是物件導向(3):Polymorphism
January2623:01~January2700:23Polymorphism,中文翻譯成「多型」,說真的這個概念當年Teddy學OO的時候搞了好久才弄懂,後來看了「課本」的定義之後,覺得寫得還滿好的,請參考Object-OrientedSoftwareEn...
再談CleanArchitecture三原則
August1908:45~10:00;12:56~13:382018年Teddy寫了幾篇介紹CleanArchitecture的文章如下,其中有三篇提到CleanArchitecture三原則:分層、相依性、跨層,今天再一次一起討論這三個原則。
Cle...
延伸文章資訊
- 1Top-down和Bottom-up設計方法 - 搞笑談軟工
Top-down(由上而下)和Bottom-up(由下而上)是兩種設計與解決問題的技巧。前者對問題先有一個整體的概念,然後再逐步加上設計細節,最後讓整體的 ...
- 2軟體架構的Top down & Bottom up - iT 邦幫忙
軟體架構的Top down & Bottom up. 可不可以不要寫糙code 系列第29 篇. Chris. 4 年前‧ 7640 瀏覽.
- 3自上而下和自下而上設計 - 维基百科
自上而下(top-down)與自下而上(bottom-up)同為資訊处理及知识排序之策略,在軟體、人文與科学理论(请参阅系统论)以及管理與组织等领域皆有所應用。
- 4Top-Down vs. Bottom-Up: What's the Difference? - Investopedia
Each approach can be quite simple—the top-down approach goes from the general to the specific, an...
- 5由上而下法與由下而上法:差異何在? - Asana
Navigation Instructions. Use left and right arrow keys to navigate between columns.Use up and dow...