從模擬真實世界中理解軟件設計原則
軟件設計原理的理論在大多數學生眼里既枯燥又乏味——那是因為他們從沒做過真正的軟件項目,以致于這些概念在他們眼里似是而非。
例如,他們了解耦合性、內聚性、MVC和ESB。但是當被問到為什么要掌握這些概念以及何時使用的時候就一問三不知啞口無言了。記住一些UML圖是一件很容易的事,但是要想掌握具體使用情況以及如何稍作修改以便于適應具體應用需求就難了。
為了更好地理解軟件的設計理念,有些教授想出了一些很有意思的點子——那就是模擬真實場景,這使得這些概念更易于學生的理解和掌握。
舉個關于低耦合原則的真實事例:
Mike想要申請一本護照,他到了相關部門之后遇到了Jack
兩天后,他將所需要的資料帶來,但是卻是Patricia接待了他
在現實世界中,Patricia的行為明顯毫無邏輯可言,因為該服務并不是依賴Jack才能辦理的,作為服務的提供者,她應該也為Mike辦理護照。
其具體流程也非常簡單,如果你想要申請護照,那就準備好具體的資料即可。但是沒說一定要讓Jack受理。
這個故事的寓意是:如果此服務高度依賴于Jack,那么一旦出現突發情況就會產生問題。而如果Jack一直在那,我們是意識不到他的重要性的,但是一旦他沒在,那就會影響服務系統了。
這個道理很淺顯,是吧?但是在軟件設計中,很多開發人員還是會犯這種錯誤,因為他們沒有考慮到高耦合是否符合邏輯。然后,等以后因為做某種改變導致整個架構出現問題的時候,就追悔莫及了——不得不投入更多的時間和資金去解決這些問題。
我們最好能夠可視化這些軟件編程概念,而不僅僅只是讓學生掌握理論。此外,有些圖表工具,例如依賴圖、依賴矩陣和樹映射技術等,可以讓我們可視化源 代碼發生的各種變化。例如對于Java,可以使用JDepend,JArchitect和Structure101,對于C / C++,CppDpend則很不錯。
DSM
設計結構矩陣(DSM)用一種方陣的形式,簡單緊湊又可視化地表現一個系統或項目。
下面就是一個在Architect使用DSM的例子,從矩陣中我們很容易檢測出常用程序包、依賴周期和非常用程序包。
樹映射
樹映射以一種嵌套矩陣的形式顯示層次(樹形結構)數據。樹的每個分支都有一個矩陣,然后再分支得到更小的矩陣。葉節點的矩陣按比例映射到指定大小的數據容器中。
下面就是一個在Architect使用樹映射的例子,使用一個String類來映射所有的類。
上圖可謂是將源代碼形象化了,通過這種投射到現實世界的方式,有助于我們更好地掌握軟件背后的設計原則。很多情況下,掌握理論并不足以理解一個概念。
譯文鏈接:http://www.codeceo.com/article/programming-from-real-world.html
英文原文:Understanding software design principles from real world cases
翻譯作者:碼農網 – 小峰