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 連線與項目 的相關資訊。

簡單的源碼說明

閱讀全文 »

【系統分析課程】系統分析設計與實作—活用 UML 塑模 與 C#.NET (11/01, 54 Hrs)

課程相關資訊:
http://www.hsdc.com.tw/course_signup/20081101_sa_sd_to_implement_by_cs_dot_net

【台北場】2008/11/01 起,每週六白天,每次上課為六個小時(AM 9:30~PM 4:30),共九個星期。
o 預定上課日期:11/01, 11/08, 11/15, 11/22, 11/29, 12/06, 12/13, 12/20, 12/27 。

*** 上一期(2008/06/14~08/09) 頗受好評的「系統分析設計與實作」課程完美告一段落,緊接著 HSDc. 團隊預定於 11/01 推出本年度第二期系統分析/設計課程,並且將實作內容部分(上一期為 Java/Spring)改為利用 C#.NET/LINQ Framework 實現,也期能服務利用 .NET 平台開發的軟體人員,能具有完整系統分析、設計至實作的觀念知識與技能。 (本課程均提供免費再次旁聽乙次的機會,所以學員可以一次付費,即可享有同時瞭解兩個平台(.NET/J2EE)的實作產出方式) ***

HSDc. 於 2008 年度推出了完整的系統分析、設計至實作的課程,期能協助軟體開發人員在現實的工作中,能瞭解完整的開發流程與各個角色的工作執掌與產出。在基於以架構為中心來建立團隊具共識的整體觀下,能聚焦在適切開發單位的功能點內,快速地從需求分析導出到實作,找出並克服開發過程中,包括溝通、技能與技術等風險因子。而後基於這樣的框架目標內,得以對系統的結構作重整,卻又不至於影響已有的功能前提下,得以對程式碼施以重構的技巧,讓系統更有延展度與彈性。

傳統系統分析與設計的課程,經常是「昧於現實」,將需求分析/結構設計與程式碼實作拉得太遠,而造成軟體設計與實作的不一致。殊不知,所謂的軟體塑模與程式碼的實作必然是軟體系統的一體兩面,在軟體開發過程中,必然是要保持一致性,所以設計是要作精,而不是籠統的文件報告。關於文件,只是利用工具的文件產出功能,將平時已確實所作的設計,產出美輪美奐的文件報表而已。不要為文件而文件,還去加班熬夜,傷了身體,又浪費生命在不必要的地方,實在沒有意義。

還有系統開發與實作也不是「妥於現實」,利用 IDE 工具從 Web/Windows Form 直接連接資料庫的這種開發方式,只是讓軟體人員變得更笨,只要需求變動就導致牽一髮而動全身,系統是不會有任何的延展與彈性的。最起碼的一點設計良心,又能處在國內嚴苛的環境中,對於短線時程的專案,先將系統的命脈—企業邏輯的核心,全給統籌集中在中間層,也就是企業邏輯層—先求有! 再來才是求好!— 待系統能確實上線,能滿足使用者的需求後,再則老闆與客戶對開發團隊有了信心,肯給予更多的資源—包括人跟錢,團隊的技能也有了增長與更好的溝通默契。外在與內涵的條件均俱足下,就可以專致於對系統結構的重整,並對程式碼施以重構的技巧,而又不會影響既有的功能前提下,讓系統更具可重用性與延展性,甚而轉成產品以服務更多同類型性質的客戶,又能快速的客製化每一個單位的特殊化需求。

基於這樣的理念,我們主張系統分析與設計是要「務實」,不是「昧於現實」,也不是「妥於現實」,而是在現實與理想中找到那一個平衡點。所以課程規劃是分為兩個階段。第一個階段就是捕捉系統功能需求,快速設計,立即產出程式碼。重點就是要瞭解如何作好系統的需求分析與對應到程式碼的實作。本階段需要培訓的技能有物件導向的基礎知識、從使用者角度看待系統時的外部功能分析,抓出適切的功能點開發單位、從畫面、中間層物件到連結資料庫的實作能力等。還有,一定要配套的兩個設計措施,一為撰寫測試案例與功能測試程式碼,實現自動化的測試機制;另一為活用分析類別,先利用中間層的控制類別,集中與控管從畫面與資料庫而來的企業邏輯。 第二個階段就是傳統系統分析所說的 SD(System Design), 傳統是以資料庫的 E-R(Entity-Relation) 分析,在物件導向則是稱為領域模型的建立—包括找出物件與適切的分派責任。這可不是一件容易的事,事實上應該說要具備的抽象能力要相當高,所以為何我們覺得那種 SA->SD->PG 開發流程是不務實的,因為 SD 很難作得好,然後還要 PG 去等該階段的產出,又大部分是不正確,可以說是浪費開發資源與時間。程式碼可以直接反應功能的需求,但不一定要等結構分析,集中在控制控制類別的好處就是,我們可以很容易地對結構作重整、對程式碼作重構,卻又不會影響既有上線的功能。本階段的重點當然就是對所謂結構的分析技能培養,我們會兩種方式,一為從需求抓名詞的傳統方法、另一為揭露出以交易為核心的交易樣式,可以輕易地抓出一大串的企業元件。

總的來說: 作好功能需求分析-> 影響系統能不能做出來 ; 作好結構分析-> 影響系統有沒有彈性

觀念的傳授、設計的圖形化塑模表達、程式碼的實作三層次,是我們對於系統分析設計與實作課程的基本原則與態度。修習本次系統分析的學員們,也可以拿到完整的教材、完整案例的 Model 檔與實作程式碼的對應。程式碼是以 C#.NET 再搭配最夯的 LINQ Framework,當然,要直接對應 .NET 的實作程式碼,那也是相當直覺不是難事。我們期能讓學員們上完課後,能以我們所提供的案例,包括設計模型與程式碼,當成範本而可以應用於工作實務上,甚而可以創造所屬自己的 “Pattern”。 HSDc. 軟體開發團隊,關心每一位軟體人員的持續成長...。

————————————————————————————————————–
§報名資訊:

授課日期:
 o 2008/11/01 起,每週六白天,每次上課為六個小時(AM 9:30~PM 4:30),共九個星期。課後並留半個小時供學員自由提問。
 o 預定上課日期:11/01, 11/08, 11/15, 11/22, 11/29, 12/06, 12/13, 12/20, 12/27 。
 o 遇國定假日或颱風等因素,則延至下一週上課日(本中心會主動通知學員),以此類推。

o 由於本站線上報名系統尚未測試啟用,煩請報名學員填寫下列資料報名 (下列欄位前為 * 者請務必填寫),並以 Email 寄至: service.hsdc@gmail.com
  ————————————————————————————-
  * 姓名:
  * 電子郵件:
  * 聯絡電話:
  任職公司與職位:
  備註(請填上如 ATM 轉帳帳號(後五碼即可)與新生或舊生等資訊):

  ————————————————————————————-
 o 報名經確認後,本站即會寄送確認通知信給報名學員。
 o 報名系統分析與實作班學員,請先以 ATM 轉帳預約費用($1000),並請於報名表備註欄位內,註明您的轉帳帳號末 5 碼與轉帳金額。
 o ATM 轉帳帳號: 新光銀行 (103) 帳號: 0772-50-100979-9
 o 本課程上課學員需滿 20 人以上,若未達上課人數則延期至下一梯次開課,已報名學員,本中心會電話通知,並主動辦理退費(或可保留至下一梯次)。

 授課地點:
  o 開羅會議中心,地址:台北市光復南路65號B2 (光復南路、市民大道交接口)。
  o 參考交通與地圖。 http://www.hsdc.com.tw/education/cario_map

 §課程費用:
  o $14800 (含稅)。 (同等課程原價學費為 $25,000 以上)
  o 曾經上課過本公司的「單元系列課程」學員,優惠 $12800 (含稅)。 (請記得註明為舊生,本公司查詢確認即以優惠算)
  o 三人同行,或同時報名另一單元課程,亦比照舊生的優惠折扣,每位只需$12800 (含稅)。
  o 曾於上一期上課的學員,仍可以免費旁聽本期課程。 (保留 9 名學員名額,並請攜帶原上課講義。)
  o 大學/研究所 資訊相關科系講師、助教或教授,出示相關證明,我們會以建教合作方式計費。(請另以電話聯絡)
  o 清貧或由家扶中心推薦,能出示相關證明,所有費用 免費!!
————————————————————————————————————–

§課程名稱:系統分析設計與實作—活用 UML 塑模 與 C#.NET (54 Hrs)
閱讀全文 »

活用 .NET DataSet 設計觀—實做篇(含程式碼)

Use Case 範例—下採購

Use Case 範例—下採購
圖1、Use Case 範例—下採購

UC 實現(Realizeaiton)—下採購循序圖

圖2、範例–下採購循序圖
(點擊圖片鏈接看原圖)圖2、範例–下採購循序圖

※ 延伸參考:
o 活用 .NET DataSet 設計觀—01
o 活用 .NET DataSet 設計觀—02

部分原始程式碼(C#.NET)

o 所有原始程式碼可在 「HSDc. 檔案區」 下載,執行環境為 .NET Framework 2.0, SQL Express 2005。
o 版面設計問題,線上瀏覽程式碼,請參考:
http://www.hsdc.com.tw/modules/newbb/viewtopic.php?topic_id=307&forum=2&post_id=2395#forumpost2395

活用 .NET DataSet 設計觀 <2>

比較一下 ADO.NET 與 J2EE 的永續機制

  • ADO.NET 的設計理念是將資料庫“搬移”至應用伺服器的記憶體(DataSet),然後就與資料來源離線,讓應用程式就近方便“撈”資料處理。這是屬於“寬鬆耦合 (loose coupling)”的設計方式。
  • J2EE 眾多永續儲存機制,包括 EJB Entity Bean, Hibernate 等,都是“緊緊地”維繫資料庫與應用伺服器內的資料物件 (Data Object)的一致性,將 O-R mapping 的自動化做到“最善”。這是屬於“緊密耦合 (tight coupling)”的設計方式。
  • 兩者的設計方案並不一樣,但也各有各的優缺點,並不容易評斷好壞。無論如何,企業層級的系統設計,不應受限與受制於現有的系統機制,而是應該活用、善用其優點。

DataSet 在中間層的設計策略

目的:設計 虛擬DB(Virtual DB),位於中間層(middle-tier) ,讓 企業物件(business Object) 與 控制物件(control object) 得以方便撈資料處理。

實現方法:設計 ModelVDB 類別(Class),內含兩個屬性(property),一為 DataModel;另一為 DataUtility。兩者均為 DataSet 類別。

  • DataModel 定義與關連資料庫一樣的 Table Schema(可依業務性質定義相關的 Table 即可)。
  • DataUtility 定義關於 使用者資訊、查詢條件參數、資料庫連線資訊等 Table Schema。

設計約束:

  • 把 ModelVDB 視為是 “Value Object”,所以不提供任何方法供物件存取,企業或控制物件是直接透過屬性的存取來取得 位於 VDB 內表格的資料。
  • VDB 要讀取或寫入資料庫系統,是透過控制物件呼叫 “小弟物件(PO, Persistent Object)” 負責與資料庫的溝通。
  • Form 物件不得直接存取 ModelVDB ,必須透過控制物件,以維護資訊的完整性與封裝(encapsulation)。

圖1、ModelVDB 與其它物件的相依性關係
(點擊圖片鏈接看原圖)圖1、ModelVDB 與其它物件的相依性關係

圖2、範例–查詢訂購資訊 by ModelVDB
(點擊圖片鏈接看原圖)圖2、範例–查詢訂購資訊 by ModelVDB

DataSet 在 UI 層的設計策略

目的:設計 表單專用的虛擬DB(Virtual DB),讓 表單物件直接存取其內表格的資料,再透過 控制物件 轉換格式至 ModelVDB,然後寫回至實體資料庫,反之亦然。

優點:表單擁有專屬的虛擬資料庫,設計的表格可以以表單為單位,來儲存表單內的欄位資訊,而不用與實體資料庫的結構相符。UI 與 結構設計團隊可以個別開發,彼此不用互相遷就,未來只要在控制物件執行格式轉換即可。

實現方法:設計 ViewVDB 類別(Class),內含兩個屬性(property),一為 ViewModel;另一為 ViewUtility。兩者均為 DataSet 類別。

  • ViewModel 定義以表單為單位的表格,行(column)與資料型態以表單欄位為主。
  • ViewUtility 定義關於 使用者資訊、查詢條件參數等 Table Schema。

設計約束:表單要寫入實體資料庫時,將 ViewVDB 當參數傳遞給 控制物件,再由其轉換格式為 ModelVDB,再透過 PO 物件寫入實體資料庫。

圖3、ViewVDB 與其它物件的相依性關係
(點擊圖片鏈接看原圖)圖3、ViewVDB 與其它物件的相依性關係

圖4、ViewVDB 與 ModelVDB 的 Transform 循序圖表達
(點擊圖片鏈接看原圖)圖4、ViewVDB 與 ModelVDB 的 Transform 循序圖表達

活用 .NET DataSet 設計觀 <1>

什麼是 .NET DataSet?

  • ADO.NET(.NET Framework 所提供的資料存取技術解決方案) 中最為主要的元件。
  • 它是一種資料容器(container)物件,是屬於記憶體的快取資料(in-memory cache of data)。
  • 它完全獨立於資料來源(如 資料庫系統),是離線的(disconnected)。
  • 它所讀取的資料來源可以是:
    • Database (SQL Server, Oracle …)
    • Object (如 MQ 物件)
    • Web Service
  • 它內部可以包含多個表格(Table)的關連,並且可以同時從多個資料來源讀取資料至所定義的表格,儲存成為一列列(row)的資料。
  • 它內部的格式是以 XML 所定義的,所以可以序列化(serialized)為 XML 字串,以方便當成參數來傳遞。(例如,透過 Web Service 傳至 EJB Session Bean)。

DataSet 與 RDB 的連結關係

圖1、DataSet 與 RDB 的連結關係
(點擊圖片鏈接看原圖)圖1、DataSet 與 RDB 的連結關係

DataSet 內的 Table Schema

圖2、利用 Visual Studio .NET 2005 Solution Explorer 瀏覽 DataSet
(點擊圖片鏈接看原圖)圖2、利用 Visual Studio .NET 2005 Solution Explorer 瀏覽 DataSet

DataSet 的優勢

  • 中間層(middleware)的物件可以將 DataSet 視為是位於記憶體的資料庫(虛擬 DB),方便就近 “撈” 資料來處理。
  • 可攜性極高,隨時可以序列化為 XML,當成參數傳遞至其它如表單或物件來處理。
  • 當 DataSet 內的資料經過處理而變動後,由於需要與資料庫內的資料保持同步、維護一致性,所以需要再透過 Data Adapter 建立連線,寫回資料庫內。同步的過程,交由 ADO.NET 的交易機制來處理,這是屬於永續性(persistent) O-R (Object-Relation) mapping 的系統設計議題。

[.NET 研討會] 15th 軟體設計鮮思維講座 — 2007 第三場次(05/19 星期六) 13:30 ~ 17:00

各位好:

報名與詳細講座資訊請至:
http://www.hsdc.com.tw/modules/eguide/event.php?eid=34

歡迎對軟體設計議題有興趣的朋友們,在母親節過後的五月份第三個星期,蒞臨來參加「軟體設計鮮思維研討會」。
本次講座的主題完全聚焦在「Microsoft .NET DataSet 虛擬DB」的應用設計探討。

有別於 J2EE O-R Mapping 的主流解決方案(JDO, Entity Bean, Hibernate …)是走即時性的資料庫連結,MS ADO.NET 卻是走向離線式的資料庫連結。這相當有意思,我們也認為,這是非常 Smart 且為有效擺脫與資料庫緊密耦合(coupling)的解決方案,甚至,把資料庫放到月球去,透過 WebService 去撈嫦娥的資料倉儲然後放到中間層的 DataSet 是相當便利直覺的,因為,Client 端已經不需要再去注意實體資料庫擺在哪裡了 … 但是,DataSet 卻也不是被實做成 Form->DataSet->Physical 這樣的 2-tier 架構,那只會讓軟體人員變笨,是無法解決軟體變動性的根本性問題,DataSet 仍是需要配套在 3-tier ,與控制物件、企業物件等設計議題的 …

本次研討會內容,揭露出 HSDc. 顧問團隊近年來輔導諸多以 .NET 開發的軟體公司,所提出如何將 DataSet 設計成「虛擬DB(Virtual DB)」,並有效隔閡表單欄位與資料庫 Table Schema 的變動設計解決方案。得以讓其 GUI Team 與 Business Team 兩者同時開發,GUI 再也不需要考量到 Database Table 的欄位與資料型態,各作各的,彼此沒有衝突,只要透過中間層的控制物件來調和即可。

擔心因離線式而無法作大量資料的查詢與存取,所以才 “不得不” 實做 stored-procedure? 沒這回事的,虛擬 DB 沒有 Performance 的問題,Ringle Lai 講師,會透過實做並公開程式碼,來證明這一些不是問題的問題的。

***
1. 請注意,由於需要保留及計算報名學員們的座位,請確定會前來參加後才填寫報名單,若不克前來,也請於報名表單或來信取消報名。若報名人數尚未滿額(每場人數以 75 人為限),不及報名者,若尚有名額,仍可以現場報名。
2. 基於成本問題,我們需要擔負包括大型會議室租借、光碟製作、點心茶水 …等費用支出,不得已需要向報名學員,酌收少於電影票一半的研討費用 NT$150,我們的回饋會是講師群們的用心,將其專業的見解與體會,分享給研討會的學員們,當然,參加學員們也會拿到光碟片,內含了收集歷屆講座(2005,2006)的內容與 EA 試用軟體及操作範例等,絕對是物超所值的。

—————————————————————————————-
§講座主題:

 場次1. 活化 .NET DataSet 實作價值的設計觀 – Kenming Wang
  o 比較一下 .NET 與 J2EE 的 O-R(Object-Relation) Mapping 實做機制
  o 瞭解 .NET DataSet 的本質 — 與資料庫離線的資料物件
  o 利用 DataSet 實現 虛擬DB(Virtual DB) 在中間層的設計
  o 有效隔離表單欄位與資料庫 Table Schema的變動設計 — ViewVDB and ModelVDB 設計
  o 利用 UML 循序圖(sequence diagram)表達 VDB 與控制、企業物件之間的訊息(message)傳遞
  o 簡單範例與實做

 場次2. 利用虛擬DB的實做策略與範例 – Ringle Lai
  o 虛擬DB、fine-grained structure及OO Principal
   (1) 虛擬DB v.s. Value object
   (2) 虛擬DB v.s. Business object
   (3) 虛擬DB、Value object與Business object的異同
  o 虛擬DB的應用策略
   (1) Presentation tier與Data tier的應用
   (2) Controller的角色定位
   (3) 實做限制
  o 虛擬DB與實做上的考量Issue
   (1) 大量資料存取
   (2) 虛擬DB or Store Procedure?
   (3) Performance Issue
  o 虛擬DB的實做範例

§時間:2007/05/19 (星期六) PM13:30 ~ PM 17:00 (三小時的講座時間,並留半小時供學員提問)
§對像:對軟體設計有興趣者,包括在職軟體開發人員及相關資訊科系講師及學生等。
§地點:開羅會議中心,台北市光復南路65號B2 (光復南路、市民大道交接口)。 請參考交通與地圖。
§主辦單位:HSDc 軟體設計顧問中心。
§講師:賴信仁(Ringle Lai)、王克明(Kenming Wang)。
§報名方式:請填寫報名活動內的表格內容,包括姓名、公司/職稱、聯絡電話、Email、等,採現場繳費方式。
§備註:
 o 本次講座預計開放 75 個名額。(額滿即停止報名)
 o 因上課人數眾多,恕不直接提供列印教材,本次講座會直接附送「講座教材及示範操作光碟」等。教材內容並於講座前兩日公佈於 HSDc. 網站,學員可自行列印講座教材。
—————————————————————————————-
HSDc.(High-quality Software Design Consultant.)
TEL: 02-27227179
service.hsdc@gmail.com
軟體專業設計論壇: http://www.hsdc.com.tw

軟體思維顧問

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

Personal