C# DDE 用戶端(Client) 的範本(含源碼下載與說明)

參考我原來所寫的一篇:「談談 C#.NET 連結 DDE Server 的設計觀」。 使用 NDde 這個開放源碼,來包裹(Wrap) Win32 APIs 連結 DDE 的通訊底層,使得 .NET-based 的應用程式也可以很便利地連結 DDE Server。

利用幾天的時間,我寫了一個算是比較完整的 C# DDE 用戶端(Client)程式,可以確實連結國內券商所提供的看盤軟體(本身即是 DDE Server)。目前測過包括 “永豐金 eLeader”, “元大 Yeswin”, “日盛 HTS”, “康合 全都賺” 等,均可以正常連結並依據連結項目(Item)持續顯示所跳動(Tick)的值(Value)。 這算是一個簡易的範本,旨在展示利用 .NET OOP 語言可以確實連結 Legacy DDE Server,並進而讓有心的程式交易人員,可以再行擴展,自行撰寫包括報表統計、技術線型分析 等應用。

CsDdeClient(Simple)_ScreenShot-02

我寫的這個簡單 DDE Client,基本功能如下:
 o 可以同時連結多個 DDE Server。
 o 可以同時顯示多個項目(Item)所持續跳動(Tick)的數值(Value)。
 o 可以正確顯示傳輸項目值為中文的編碼。
 o 可以任意地刪除 DDE 連線與項目 的相關資訊。

簡單的源碼說明

閱讀全文 »

談談 C#.NET 連結 DDE Server 的設計觀

DDE (Dynamic Data Exchange)?,這似乎已經是微軟過時的一種通訊傳遞的技術了。 但是只要是跑券商提供的看盤交易應用軟體,諸如 永豐 e-leader, 元大 yeswin, 日盛 hts 等,都必然有提供 DDE 連結的功能。 探究原因,Excel 肯定是佔最大的因素了,因為一般交易者可以很容易地透過 Excel,抓取看盤軟體正在跳動(Tick)的即時金融商品資訊,在不需要太懂程式設計語法的情況下,也能利用 Excel 強大的統計功能,或者利用簡單的 VBScript 語法,撰寫指標或統計數據等。

先前我就曾經利用 Excel 撰寫過即時的「漲/跌/平 家統計數據」了,詳見:「利用 Excel 實現權值成分的漲跌平家走勢圖」。 不過,目前我正在研究其中關於大盤即時 “量” 的變化,也就是觀察 Top-100 的期貨成份股,在每一分鐘內,統計所有即時跳動(Tick)的成交買價量與賣價量。 所以幾乎每一秒,只要一有跳動,就必須觸發(trigger)統計運算的邏輯,把 100 支以上的權值成份股整個迴圈跑過一次。 不知道是否因為我對 VBScript 不習慣,還是寫法有問題,在 Excel 內的處理效能上還是來得不佳,喔,甚至還曾幾次出現過當掉的現象,而這在即時看盤中,當然是很忌諱的 ; 另外,我也可能想要開發個能同時連多個報價來源 DDE Server 的 “中介(intermediate)” Server,除了可以方便調整想要擷取的資料來源外,還能兼容有 “容錯(fault-tolerance)” 的功能。 反正啊,能具有高度的客製化(customization),以及無限想像的延展性(scalability),更是我想要的,而這些當然就要寫程式自行來去開發擴展囉。

DDE 是個老舊的傳輸技術,從微軟官方的角度,係制訂了 DDEML (Dynamic Data Exchange Management Library) 的規格,並提供給 Developer 最高階的連接方式就是 Windows 32-bit 的 APIs(Application Programming Interfaces),在實際 Windows-32 的作業系統下,是被實作在 “User32.DLL”。 所以,最適合用來開發 DDE-based 的程式語言,當屬可以直接連接 Win-32 APIs 的,諸如 VB6, C++ 等,開發上對於 DDE 的實際連結,會來得容易許多。

anyway, 我還是喜歡利用 .NET C# 來寫程式,最主要只有一個原因,我對它比較熟悉!

而我在一般關於「程式交易討論區」看到有些網友發言,說 .NET 並不支援 DDE! 這句話初看到挺覺得奇怪的,其實正確地來講,應該是說 .NET Framework 並沒有提供 DDEML 的 Wrapper 成為 .NET 元件,所以若要從 .NET 應用程式連結 DDE Server 的話,就必須自行實作呼叫底層(相對於 .NET)的 Win-32 APIs。 一個簡單的流程如下:

  C#/VB .NET Client → .NET DDEML Object(自行撰寫,因為官方沒有提供) → Win-32 DDEML APIs

西方的一個老諺語: “Don’t Reinvent the Wheel (不要重覆再造輪子)。” 那個 .NET DDEML Wrapper 物件,是否要自行撰寫,有待商榷! 若要自行撰寫,那就確定了,是要從造一個新的輪子開始,而且還要很熟悉 DDE 相關的通訊細節才行! 建議啦,這類的 “輪子建設” 工作,先查詢一下 Google,這可是 Google 最大的功用! 發現到,其實真的已經有許多其他行家已經造好可以在 .NET 環境開發的 “DDE 連結 輪子” 了。 包括 美國、中國大陸、甚至日本等都有人在造。 而其中這個: NDde ,看來應該是最為完整的開源 (open-source)專案了。 還包括文件、範例,甚至原始碼等,是可以充分在 .NET 2.0 環境下執行的,下載回來解壓縮放置某一個目錄後 (ex. “\Program Files\Ndde”),把你的 .NET 專案 Add Reference 該目錄內有個 “NDde.DLL” 檔案即可。 這使得寫 C# DDE Client 變得相當簡單,我個人已測過連結 e-leader DDE 來源,完全沒有問題!

要透過 C#/VB .NET 撰寫連結 DDE Server 的 Client 端程式,只要參考 NDde 目錄內的 /Samples 範例檔即可。 另外底下是我自己先暫時寫的一個小小控制程式,主要是測試是否可以確實連結 DDE Server 並取得 Topic/Item 的回傳資料。

閱讀全文 »

Java Spring 簡單範例操作與學習指引〈2〉

*** 第一個階段子目標 ***

  1. 確實在 Eclipse IDE工具內建立可以完整開發 Spring-based 的應用程式。
  2. 新增 middle-tier性質專案(純粹是 java class,沒有 UI),撰寫 {員工薪資管理Control.java} 這個控制物件的程式碼框架 (skeleton),新增一個 Spring Beans 的 XML設定檔 (config file),在設定檔內設定該控制物件的相關屬性。
  3. 利用 JUnit 測試框架 (Test Framework, Eclipse 內建),馬上撰寫該控制物件的功能測試程式碼。

一、新增專案

  1. 選擇 [File]→[New]→[Project…],當出現 [New Project] 的 wizard 對話框時,選擇 [Spring]→「Spring Project」,然後按下【Next】,出現 [New Spring Project] 對話框內,輸入新增的專案名稱: HRDemo,其它選項照預設即可,按下【Finish】完成,並將 eclipse的視界 (perspective)切至 Java EE。

    圖 3、新增 Spring Project 的對話框
    圖 3、新增 Spring Project 的對話框

  2. 在 [Project Explorer] 的專案視窗內,將滑鼠移至專案的根目錄 (HRDemo)下,右鍵點選 [Build Path]→[Configure Build Path …],出現 [Properties for HRDemo]的對話框,然後將標籤切換至 [Libraries],並點擊【Add Libraries…】,當出現 [Add Library] 對話框後,選擇 [User Library] 然後點擊 【Next】。

    閱讀全文 »

Java Spring 簡單範例操作與學習指引〈1〉

寫在前面

我想藉由一個小小的功能案例,來分享個人在學習所謂 “新的 IT 技術”,尤其是偏向實作面的 “How-to” ,包括工具的操作,與程式的寫碼等,是如何從所設定的主要完成目標,再分解成數個階段性的子目標,然後一次只克服一小段問題,再往前漸增推進,往下一個階段目標前進。 同時,這也算是一份提供給軟體開發入門的學習操作指引的分享文件。

實作的過程中,所有相關的參考文件,均是透過 Google 的查詢,以及與實作規格相關的線上文件。 當然若工作上的需要,也是可以考慮購買 “How-to” 操作性的參考書籍翻閱。 不過我是覺得好像透過網路上都可以查得到,雖然可能比較零散,但同時可以增進自己如何下關鍵字找 “How-to” 的技能,也是不錯的。

我想提供兩個不同平台的版本,一為本系列案例中的 Java + Spring;另一為 C#.NET + LINQ (會以另外一份操作指引文件分享)。 可以說是把 Spring 與 LINQ 主要實現在 O-R (Object-Relation) Mapping 的實作議題上。

這個功能案例很簡單: 系統提供 “計算員工薪資 By ID” 、 “計算所有員工薪資” 功能 (從使用案例的需求而來)。

案例雖然很簡單,但是它是可以 “成長” 的,而且也具延展性。 最起碼我把它可以區分為兩個階段的上線目標:

  • 第一個階段:快速實現功能需求,但保留了可以具延展性的框架。
  • 第二個階段:找出穩定的共用元素,讓系統更有彈性。

為了能順應這兩個階段的目標,一些軟體設計的最基本原則就會隱含在內,同時這也是這個範例期能達成的標的:

  1. 從系統中間層(middleware),表達服務(service),也就是功能需求的控制物件(control object)開始,撰寫程式碼;而非從展示層(presentation)的 UI 表單開始。 (焦點應該是擺在以服務為中心、置於中間層的控制物件;不要再從 UI 開始來開發系統了,那很容易會是 2-tier 思維。)
  2. 實現企業邏輯於中間層的控制物件,而不會寫在 UI scripts 上,或是資料庫的 stored-procedure。否則系統即喪失了延展性。
  3. 寫完一個個實現系統功能的控制物件後 (本例只完成一個控制物件— {員工薪資管理Control.java}),馬上就撰寫可以測試該控制物件功能的測試程式碼 (Functional Test Code);當控制物件與測試程式碼開發告一段落後,才開始寫 UI 表單來驗證控制物件所提供的功能服務。
  4. 實現 Java Spring Framework 的開發— 以 Spring DAO, O-R Mapping 框架為主。
  5. 確實可以滿足使用者所需要的系統功能後 (確實可以上線使用),下一個階段則是結構的重整,也就是重構 (Refactoring), 而重構的前提就是不能影響到已上線的功能。 本例會採物件導向的委派 (delegate)與多型 (polymorphism)的技巧。

開發環境建置

需要軟件

  • Java JRE (Java runtime environment), JRE 5/6 以上版本。
    下載: http://java.sun.com/javase/downloads/
  • Eclipse IDE for Java EE Developers (目前使用 3.3.2 最新版, 06/25/2008)
    下載: http://www.eclipse.org/downloads/
  • Spring Framework (目前最新為 2.5.5 , 06/25/2008)
    下載: http://www.springframework.org/download
  • Spring IDE (目前使用 2.0.6, 06/25/2008,直接透過 Eclipse 下載安裝)
    安裝參考文件: http://springide.org/project/wiki/SpringideInstall

安裝 Spring Framework

  • 建議從上述網址所下載 Spring Framework 的壓縮檔為 spring-framework-2.X-with-dependencies.zip。 該壓縮檔內除了包括 Spring 所需的 library 外,還包括了諸多在系統開發上,其它經常用到的 Open Source 專案的相關連套件,包括 ant, axis, hibernate, log4j, struts …等。
  • 解壓縮該檔案,並將解壓縮的目錄放置在常用 java 開發的 library 路徑內,例如:
    C:\java\lib\spring-framework-2.X

在 Eclipse (Java EE 版本)上安裝 Spring IDE

  1. 在 Eclipse 的選單 [Help]→[Software Updates], 選擇 [Find and Install…], 當出現 [Features Update] 對話框時, 選擇 [Search for new features to install], 按下【Next】進入 [update site to visit] 對話框。 然後點選 【New Remote Site】, 當出現 [New Update Site] 對話框時, 在 [Name] 欄位輸入:Spring IDE;在 [URL] 欄位輸入:http://springide.org/update 。 輸入完成後按下【Finish】,Eclipse 即會至該網址搜尋並列出最新版本的 Spring IDE 與其相關連的套件列表。

    Spring 簡單範例操作指引 ScreenShot
    圖 1、新增 Update Site 的名字與 URL 位址

  2. 現的對話框內,勾選「Spring IDE」與「AJDT」套件, 其中「Spring IDE」內的「Dependencies」套件不要勾選(該套件是適用在 eclipse 3.2.x 版本)。 勾選完畢後選擇【Next】進入下一 License對話框, 點選同意後再按下【Next】到下個對話框, 最終選擇 【Finish】後,eclipse 即會開始安裝 Spring IDE 等套件。 安裝完後重新啟動 eclipse 即可開發 Spring-based 的專案。

    Spring 簡單範例操作指引 ScreenShot
    圖 2、勾選要安裝的 Spring IDE 與 相關連的套件

{iThome 書評—11} Test Driven Development By Examples

副標題:崇尚簡約之道的測試驅動開發,除了讓軟體人員為自己寫的程式負責外,還能提昇勇氣,勇於溝通與更多的回饋。

Test Driven Development By Examples Test Driven Development By Examples
———————————–
作者/Kent Beck /著
出版社/Addison-Wesley Professional 出版
ISBN/ 0321146530

內容簡介
Clean code that works–now. This is the seeming contradiction that lies behind much of the pain of programming. Test-driven development replies to this contradiction with a paradox–test the program before you write it.

A new idea? Not at all. Since the dawn of computing, programmers have been specifying the inputs and outputs before programming precisely. Test-driven development takes this age-old idea, mixes it with modern languages and programming environments, and cooks up a tasty stew guaranteed to satisfy your appetite for clean code that works–now.

Developers face complex programming challenges every day, yet they are not always readily prepared to determine the best solution. More often than not, such difficult projects generate a great deal of stress and bad code. To garner the strength and courage needed to surmount seemingly Herculean tasks, programmers should look to test-driven development (TDD), a proven set of techniques that encourage simple designs and test suites that inspire confidence.

By driving development with automated tests and then eliminating duplication, any developer can write reliable, bug-free code no matter what its level of complexity. Moreover, TDD encourages programmers to learn quickly, communicate more clearly, and seek out constructive feedback.

Readers will learn to:

  • Solve complicated tasks, beginning with the simple and proceeding to the more complex.
  • Write automated tests before coding.
  • Grow a design organically by refactoring to add design decisions one at a time.
  • Create tests for more complicated logic, including reflection and exceptions.
  • Use patterns to decide what tests to write.
  • Create tests using xUnit, the architecture at the heart of many programmer-oriented testing tools.

This book follows two TDD projects from start to finish, illustrating techniques programmers can use to easily and dramatically increase the quality of their work. The examples are followed by references to the featured TDD patterns and refactorings. With its emphasis on agile methods and fast development strategies, Test-Driven Development is sure to inspire readers to embrace these under-utilized but powerful techniques.

前言

我一位軟體設計的夥伴,是我在這個業界看過上千軟體人員以來,唯一我認為是最為天才的。不是只有 IT 技術的學習能力快速而已,他更具備的是柔軟的頭腦與身段,抽象能力極高,擅長把軟體作軟,令人讚嘆與嘆為觀止。但是我還是覺得他與國外軟體先驅的大師們仍有一段差距,並非是實作,也不是學習的能力之差,最最主要的差距就在於:創新能力! 當然,我與他非常熟,才敢這樣說,而他也能認同此點。我更期勉如此有天分的人能往更高段的軟體設計殿堂,使得有能力的人可以有更多的貢獻,幫助更多人。

什麼叫做創新能力? 舉個例子,我輩之流如我是可以看得出早期 EJB 規格的問題點(簡單的說,軟體結構被該規格綁得死死的),所以會批判與避免使用它。但是 Rod Johnson 卻不是只有批判反對而已,而且還身體力行,寫出了 Spring Framework,實現 IoC (Inversion of Control), AOP (Aspect-Oriented Programming) 的輕量級開發框架,真正釐清 Developer 與 系統層級服務的責任; 再如本次書評要介紹的: Kent Beck 因為在輔導專案的過程中,深深感於測試應伴隨著所開發的程式碼,而不是延遲 (太多大型單位都把測試當作一個重要的製程,卻是交給另外的部門,在開發後才展開測試,這樣能應變測得好? 我很懷疑),所以主張“測試先行 (Test First)”。而為了實現與主張他的理念,甚至設計出 免費開放的 JUnit Framework 等測試框架,以及寫出如本書“TDD (Test Driven Development by Example)”,造福諸位大德。我輩之流雖無法創建如此了不起的框架,但起碼也要作一些推廣,讓 Developer 們瞭解什麼才真正是維繫軟體品質的重要關鍵。

測試先行!先行測試!

我實在是太欣賞 Kent Beck 的寫作風格了。本書才 200 頁初頭,卻共分為 32 個章節。怎麼會這麼多章節? 原來作者根本沒有分小節,然後就是完全以例子,每一章只完成一個小目標、解決一個小問題就結束了。全平面的寫法,沒有艱澀難懂的術語,簡約的風格,真正夠得上是“俗又有力”!

全書共分為三大部分,前兩大部分就是範例,第三部分則是 TDD 的設計模式(Patterns)。第一部份以一個“幣值轉換”的程式範例(本書開頭的介紹中特別有說明到該實際案例的緣由),利用 Java 程式碼範例,來逐漸揭露出 TDD 的設計意涵。這個範例,你初一眼看到時,會覺得怎麼有那麼白癡的寫法? 是的,Kent Beck 盡量模仿初學者剛寫程式碼的程度,這也同時說明了 TDD 是多麼的簡單明瞭,初學者一學就會,也懂得如何慢慢來修正自己的程式碼 (這其實已經逐漸走向設計之道了)。這一部份會讓你瞭解到什麼才叫做是“Test First”? 還沒寫類別程式碼之前就先寫測試程式碼了! 相當之令人驚訝。當然,測試一定不會過,再來才是開始寫你的主題程式,新增類別、編輯屬性、修改參數 …等,請記得,每次只修改一個地方,然後測試它,逐漸讓錯誤減至零,測試亮綠燈為止 (測試有錯會亮紅燈)。簡單的設計、列出工作清單、一次只解決一個問題、測試它、讓它正確,反覆修正... 正是 TDD 最重要的精神。

第二部份則是藉由 Python 語法來探索 xUnit 測試框架的設計過程。是的,這一部份真的是在教你如何撰寫所屬自己的測試框架,本以為開發 Framework 是相當困難且嚴謹的設計工作,但你看 Kent beck 又是近乎白癡的作法,但竟然三兩下就可以開發出測試框架,而且在設計的過程中,還仍能秉持著“測試先行”,真是神奇! 會使用 Python 作為範例的原因,我猜想除了語法易懂之外,它本身是屬於“script-based”的語言,藉此來證明這樣也是能實現測試框架的實作。事實上,目前已知有 30 餘種程式語言支援 xUnit Framework,那麼為何作者還要鼓勵程式人員開發所屬自己的測試框架呢? 兩個理由:1.讓你有對測試工具自我主宰的感覺;2. 藉以探索測試內部的機制。

第三部分是 TDD 的設計模式。這裡談及到了測試的策略思考,包括到底測試的意涵為何、那個時候測試、如何選擇什麼樣的邏輯與資料來作測試。如何測試? 不要紙上談兵,只寫那些測試案例,就是一定要寫自動化 (automated)的測試程式;那個時候測試? 無庸置疑,測試先行! 甚至主題程式還沒有寫出來、資料也還沒備妥之前;測試什麼? 功能性 (針對需求)與單元性(Unit)的測試 (針對本質性的領域類別)。 TDD 崇尚簡潔 (Simplicity),擺脫那些無謂的高度儀式化吧,從簡單的地方開始做起,為自己所寫的程式負責任,維繫最基本的程式品質,並期能持續演化而又不影響既有功能正確性的前提下。

Simplicity is the Power!

TDD 只有一個核心精髓與兩個原則。精髓為:讓程式碼可以運行並能保持純潔無暇 (Clean code that works)。而原則是:1. 只有自動化測試失敗時,才寫新的程式碼;2. 消除重覆 (duplication)。尤以後者,又與系統架構中的相依性 (dependency)設計有相當密切的關係,當消除掉重覆的程式碼後,往往系統的耦合 (coupling)程度降低,也使得可再利用性的價值提昇。

Kent Beck 還特別在序文中提及了“勇氣 (Courage)”,把 TDD 與之關連一起。他認為測試驅動是一種可以在開發過程中控制憂慮感的開發方法,它可以讓你:盡快具體的學習,而不是一直處於試驗性的階段;取代沈默寡言,讓溝通更多的交流;不是躲開回報,而是更能尋求具體有幫助的回饋 (feedback)。當讀者閱讀完本書後,應該就能準備:1. 從簡單開始做起;2. 寫自動化的測試程式;3. 重構 (refactor),每次只增加一個新的設計。

{iThome 書評—7} 重構—改善既有程式的設計中譯版

重構:改善既有程式的設計
— Refactoring : improving the design of existing code 重構:改善既有程式的設計 — Refactoring : improving the design of existing code
———————————–
作者/Martin Fowler/等著
譯者/侯捷, 熊節/譯
出版社/碁峰 出版
ISBN/9867594061

內容簡介
當物件技術成為老生常談之後 — 尤其在 Java 編程語言之中,新的問題也在軟體開發社群中浮現了出來。缺乏經驗的開發人員完成了大量粗劣設計,獲得的程式不但缺乏效率,也難以維護和擴展。漸漸地,軟體系統專家發現,與這些沿襲下來的、品質不佳的程式共處,是多麼艱難。物件專家運用許多(而且日漸更多)技術來改善既有程式的結構完善性與性能,已有數年之久。但是這些被稱為「重構」(refactoring)的實踐技術,一直(只)流傳在專家領域內,因為沒有人願意將全部這些知識錄寫為所有開發人員可讀的形式。這種情況如今終於結束。在《Refactoring: Improving the Design of Existing Code》書中,知名的物件技術者 Martin Fowler 闖入新的領域,褪去那些名家實踐手法的神秘面紗,並展示軟體從業人員領悟這種新過程的重大意義。

只要受過適度訓練,一位技巧嫻熟的系統程式員可以在拿到一個糟糕的設計之後,把它翻新為設計良好、穩健強固的程式碼。本書之中,Martin Fowler 告訴你重構機會通常可以在哪裡找到,以及如何將一個糟糕的設計重新修訂為一個良好的設計。每個重構步驟都十分簡 — 簡單到了似乎不值得去做的程度。重構涉及將欄位(field)從一個 class 搬移到另一個class,或將某些程式碼拉出來獨立為另一個函式(method),或甚至將某些程式碼上下移動於繼承體系(hierarchy)之中。這些個別步驟雖然可能十分基本,積累下來的影響卻能夠徹底改善設計。重構已經被證明可以阻止軟體的腐朽與衰敗。

除了討論各式各樣的重構技術,作者還提供了一份詳細名錄(catalog),其中有超過 70個已被證明效果的重構手法,以饒富幫助的重點,教導你實施的時機,實施時的逐步指令。並各自攜帶一個例子,顯示重構的運轉。這些富有良好解說價值的實例都以 Java 寫就,其中的觀念適用於任何物件導向編程語言。

Martin Fowler 是一位獨立諮詢顧問,他運用物件技術解決企業問題已經超過 10 年。他的顧問領域包括健康管理、金融貿易,以及法人財務。他的客戶包括 Chrysler, Citibank,UK National Health Service, Andersen Consulting, Netscape Communications。此外Fowler 也是objects、UML、patterns 技術的一位合格講師。他是《Analysis Patterns》和《UML Distilled》的作者。

Kent Beck 是一位知名的程式員、測試員、重構員、作家、五弦琴專家。

John Brant 和 Don Roberts 是《Refactoring Browser for Smalltalk》的作者,此書可從http://st-www.cs.uiuc.edu/~brant/RefactoringBrowser 獲得。他們兩人也是諮詢顧問,研究重構的實踐與理論有六年之久。

William Opdyke 在伊利諾大學所做的 object-oriented frameworks(物件導向框架)博士研究,導出了重構領域的第一份重要出版品。他目前是 Lucent Technologies/Bell Laboratories 的一名卓越技術人員。

譯者 侯捷,致力計算機技術教育超過 10 年 — 以著作、翻譯、評論、專欄、授課等多重形式。對於各種層級、各種定位、各種技術領域之 Framework Libraries 有濃烈興趣和鑽研。

譯者 熊節,普通程式員,喜編程,樂此而不疲。酷愛讀書,好求新知。記性好忘性大,故凡有所得必記諸文字,有小得,無大成。胸有點墨,心無大志,惟願寧靜淡泊而已。夜闌人靜,一杯清水,幾本閑書,神交於各方名士,獻曝於天下同好,吾願足矣。

前言

本書我覺得可以說是軟體界兩大奇書之一 (另一本就是“Design Patterns”)。設計模式講究的是在程式碼之前 (常所說的系統分析與設計活動)的事先設計,而重構講究的則是程式寫碼後對結構的重整。

我們要先瞭解一件事,軟體設計不可能如建築業一般,只在藍圖上畫好設計圖就能建構出穩固的高樓大廈。軟體開發是要經過不斷地分析、設計、寫碼、測試與修正… 。漸增與反覆,才有可能建構出高品質與強固的系統。事先的設計能保障程式碼相當程度的品質,但不可能完美無瑕,事實上,即使如本書作者 Martin Fowler,也仍須透過程式碼的驗證回饋,再回頭來修整軟體的結構。可以說,運用在紙上藍圖的設計模式與在程式碼的重構本都是設計中的一環,“Top-down (SA/SDPG)”與“Bottom-up (PGSD/SA)”兩者本就不應該在軟體工程是被分開為兩種方法論,而是互補,缺一不可,才有可能建構出軟體設計開發的正回饋環路。

所以重構的對象為程式碼,目的在於對程式碼背後所隱含的結構作重整,提昇對軟體系統的彈性與穩定,同時也相對能讓程式人員容易維護與讓寫碼更有效率。因為設計不可能一開始就是正確,它會隨著設計者的經驗成長而進化;程式碼被閱讀和修改的次數遠多於它被編寫的次數。保持程式碼易讀、易修改的關鍵,就是重構。

本書的作者為 Martin Fowler,不過其實考究起來,“重構 (Refactoring)”一詞是由 Kent-beck在 Smalltalk 專案中率先所提出的概念,並用在實務的顧問輔導。Fowler 是集眾多有經驗的軟體開發先驅們之大成,而把他們所經常用在程式碼重整的技巧整理編寫成重構名錄 (catalog of refactoring),模仿如設計模式一般,對每一個重構給予命名與應用時機等,讓程式人員之間方便利用這些詞彙作為溝通,而成為日常開發實務上的習慣。

瞭解為何重構、為誰重構、何時重構

閱讀全文 »

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal