維's profileIT : 是工作還是嗜好?PhotosBlogListsMore Tools Help

Blog


    September 20

    Delphi/Delphi.NET多層應用系統開發技術(II)

      終於入秋了. 眼看這1Q就要結束了, 不過DevCo的技術研討會可還沒結束. 由於上次的Delphi/Delphi.NET多層應用系統研討會反應很不錯, 因此台灣DevCo又將再接再厲於9月的最後一個星期推出第2集的Delphi/Delphi.NET多層應用系統研討會.
     
      在這次的研討會中我們將和各位討論如何能夠重覆使用企業邏輯模型於各種不同的應用架構中, 比如應用在C/S架構和分散式架構, 其實這也就是PIM映射成不同的PSM應用的範例, 讓各位瞭解MDA/DDA開發的好處以及目前的工具支援到了什麼樣的程度.
     
      因此在這次的研討會中我們將討論下面的主題:
     
    從RAD到模型趨動開發(MDA)
    系統架構和設計
      典型的資料趨動應用程式
      ECO應用程式架框
      單機型應用程式
      主從架構型應用程式
      ASP.NET應用程式
      多層ECO應用系統
    範例
      企業邏輯模型
      ECO應用程式架框
    建立高延展性的ECO應用系統
    結論
     
    歡迎各位踴躍參加.
     
    在第3季結束, 進入第4季之後我們將開始為Java的開發人員舉辦研討會, 例如EJB 3程式設計, Java模型開發等等, 到時我們也希望和眾多Java的開發人員有更多互動的機會. 
    September 19

    最新的BDS 2006和Turbo版本的Hotfix

    Borland/DevCo公布了最新的Hotfix修補包可以一次提供所有的Hotfix,此外這次的Hotfix增加了Hotfix 8Hotfix 9,其中的Hotfix 9應該是許多人特別需要的,尤其是經常在編輯器中編輯龐大程式碼的使用者。

    Hotfix 9修正了當開發人員在編輯器中編輯龐大程式碼並且經常切換不同的編輯頁次而會造成記憶體使用量不斷上升的狀況。會為什麼會造成這個問題? Mark透露了一點消息。這個編輯器記憶體漏失的原因是BDS編輯器中分析原始程式碼的地方出了問題,當開發人員在不同的編輯頁次中切換時,由於舊的的程式碼出現了trickycircle reference的問題,因此造成了一些token記憶體的漏失,因此當程式碼愈龐大這個記憶體漏失的情形就愈嚴重。Mark在追蹤到了這個問題之後修正了circle reference的問題,因此解決了token記憶體的漏失,這就是Hotfix 9解決的問題。

     

    我本身已經使用了這個Hotfix2,3天了,並沒有發現什麼問題,因此建議各位也可以考慮下載使用,您可以在下面的URL找到這個Hotfix rollup:

    http://cc.borland.com/item/24132

    September 15

    可重覆使用程式碼 + 可重覆使用模型 = 更高的生產力

    許多朋友最近見到我的時候經常出現的話題之一就是ECO,他們告訴我ECO看來非常的令人興奮,他們都非常想要試試ECO,但是令他們困擾的是除了中文參考資料不多之外,就是想詢問我ECO的可使用性。例如他們很怕ECO只能使用在BDS 2006的應用程式中,其他的應用,例如MSC#VB.NET,或是WinCE是否能夠使用。我告訴他們未來ECO會支援WinCE,此外ECO是純粹的.NET應用程式,其他的.NET語言或是應用程式當然也可以使用,甚至連Win32的應用程式都可以使用ECO提供的服務。怎麼做? 那當然就是使用Web Service了。

    讓我簡單的說明一個Win32的應用程式如何使用ECO服務的範例來說明。下圖我經常使用的一個範例企業邏輯模型,請各位注意的是,我甚至可以使用OCL來定義類別的方法運算,如此一來這個類別圖就更容易移植到其他平台,例如Java平台

    現在在BDS 2006中建立一個ECO ASP.NET Web Service應用程式:

     

    然後在產生的Web Service(*.asmx檔案)加入如下的Web Service方法:

        [WebMethod]

        function GetDevCoSeminarCount : Integer;

        [WebMethod]

        function GetDevCoSeminar : TDevCoSeminarList;

    然後實作如下:

    function TDevCoSeminarService.GetDevCoSeminar: TDevCoSeminarList;

    const

      SEMINARCOUNT = 'DevCoSeminar.allInstances';

    var

      OclService: IOclService;

      ResultElement: IElement;

    begin

      OclService := EcoSpace.GetEcoService(typeof(IOclService)) as IOclService;

      ResultElement := OclService.EvaluateAndSubscribe(nil, SEMINARCOUNT, nil, nil);

      Result := CreateDevCoSeminarDTOs(ResultElement);

      DoneWithEcoSpace;

    end;

     

    function TDevCoSeminarService.CreateDevCoSeminarDTOs(

      ResultElement: IElement): TDevCoSeminarList;

    var

      al : TDevCoSeminarList;

      anElement : IElement;

      aSeminar : DevCoSeminar;

      aDTO : TDevCoSeminar;

      iIndex : Integer;

    begin

      SetLength(al, ResultElement.GetAsCollection.Count);

      iIndex := 0;

      for anElement in  ResultElement.GetAsCollection do

      begin

        aSeminar := anElement.AsObject as DevCoSeminar;

        aDTO.FName := aSeminar.Name;

        aDTO.FLocation := aSeminar.Location;

        aDTO.FSrDate := aSeminar.srDate.ToLongDateString;

        aDTO.FMaxCount := aSeminar.MaxCount;

        al[iIndex] := aDTO;

        Inc(iIndex);

      end;

      Result := al;

    end;

    接著編譯這個ECO Web Service應用程式,等待稍後的Win32用戶端應用程式呼叫,使用它提供的服務。

    現在我再使用Delphi 7(或是BDS 2006中的Delphi For Win32)建立一個VCL Form應用程式,啟動WSDL Importer精靈輸入剛才開發的ECO Web Service應用程式的WSDL:

     

    接著在VCL表單中實作如下的程式碼來呼叫ECO Web Service應用程式:

    procedure TForm1.Button1Click(Sender: TObject);

    var

      aWS : TDevCoSeminarServiceSoap;

      wsResult : ArrayOfTDevCoSeminar;

      icount : Integer;

      aSeminar : TDevCoSeminar;

      sData : String;

    begin

      aWS := GetTDevCoSeminarServiceSoap;

      edtCount.Text := IntTostr(aWS.GetDevCoSeminarCount);

      wsResult := aWS.GetDevCoSeminar;

      for iCount := Low(wsResult) to High(wsResult) do

      begin

        aSeminar := wsResult[iCount];

        sData := aSeminar.FName + ':' + aSeminar.FSrDate + ':' +

                 aSeminar.FLocation + ':' + IntToStr(aSeminar.FMaxCount);

        ListBox1.Items.Add(sData);

      end;

    end;

    上面的TDevCoSeminarServiceSoap就是WSDL Importer精靈封裝遠端Web Service應用程式的wrapper類別。編譯並且執行這個Delphi 7Web Service用戶端應用程式,我們可以看到下面的執行結果,ECO的服務果然成功的被Delphi Win32的應用程式呼叫,使用了。

     

    Yah, 我們在Windows 32下使用Delphi 7就完成了使用由.NET ECO/MDA/DDA實作的企業邏輯服務。ECO強大的可重覆使用性再次令人印象深刻。

    瞭解了上面的討論之後,各位有使用VS.NET的朋友當然也可以使用VS.NETVB.NET或是MS C#來使用ECO提供的服務了。

    使用了ECO技術,ECO不但是『Write code once and Run everywhere』,甚至是『Model 你的business logic once and reuse everywhere』,『Reuse Code + Reuse Model』那不是讓開發人員的生產力更為提高嗎?

     

     

     

    September 11

    從廈門出差回台灣!噢,下次我可要學乖了。

    經過了一星期近非人的出差折磨後,我終於從廈門逃回台灣可以好好的睡覺了。別誤會,這是我第2次去廈門出差,廈門很漂亮又乾淨,對廈門的印象很好,而且讓我感覺有點像台灣,我本來是很想在廈門多待幾天好好玩一下,不過我真的很怕在廈門再待下去的話,我會出不了客戶的大門。

    這怎麼說呢? 原來上上星期我老板臨時通知我叫我去廈門一個大客戶那出差,我問要做什麼? 我老板告訴我是去展示DevCo的工具,DelphiC++BuilderJBuilder等。沒想到到了廈門客戶那才知道他們是純Java的開發人員,他們要的是Together的訓練。這可好了,面對這麼多天的訓練我從那兒取得訓練教材呢? 而且事先我完全不知道完全是Together的訓練。所以我只好在每天的前一晚準備教材到晚上2點多,第2天早上7點起來準備去上課,接著當天晚上再準備教材到晚上2點多,如此一直到我能脫身為止,這可把我這身老骨頭給折騰慘了。連續幾天睡不飽,再加上白天要站著講話一整天,我到最後只想趕快躲回台灣好好睡一覺,什麼技術問題我根本都不想回答了(其實沒啦,我還是很有敬業精神回答了很多的問題,只是可能有一些問題在回答時我已經頭昏腦脹,不知所云了)

    這次得到的教訓是如果下次再被叫去出差的話,不能聽信一面之詞,一定要搞清楚客戶真正的需要,否則應該要抵死不從。

    在上星期之中不斷的有朋友或是發信給我,或是在MSN上找我,或是在Blog中留言希望我把上次我在台灣舉辦的研討會的範例拿出來讓他們下載。我本來想在今天把範例和PowerPoint展示檔丟到博文視點讓我用的FTP上,但是發現我今天怎麼也連不上那個FTP伺服器,因此我會找博文視點人的問問怎麼回事,等我解決了問題之後我會把檔案都上載上去,再公佈URL讓需要的人下載,這星期我的工作就是好好睡覺了,順便準備公佈 ECO一書的進度和我昨天對這本書最新的想法。

    OK, 剛才博文視點的人告訴我FTP改變了, 所以我找到了新的FTP位置, 把檔案上載了, 有興趣的朋友可以在下面的URL下載:

    http://liwei.csdn.net/down/DelphiSeminarMaterials.rar