Tuesday, September 20, 2005

AcceptChangesDuringUpdate.

ADO.NET 於DataAdapter新增了一個屬性,AcceptChangesDuringUpdate,
這個設定影響了當DataAdapter.Update執行後是否自動執行
AcceptChanges, 其預設值是True,在單一Table Update時這個
預設值是完全正確且方便的,但當對象是parent/child Relation時
就有問題了,一般來說,我們會將Business Logic 寫在
DataAdapter.RowUpdating/RowUpdated中,在
parent/child Relation情況下, child可能於處理Business Logic時
需要讀取parent中的值,但此時parent的AcceptChanges
可能已被呼叫(因為是先Update Parent在Update Child),
造成Child無法取得Parent 的值,而產生Business Logic Error,
這或許是當初設計這個特性時未想到的情況吧.

Friday, September 16, 2005

Windows Workflow Foundation


PDC'05 上揭露了未來將出現在Longhorn 上的WWF,
從開發者角度來看,WWF 遵循了SOA及COA
(Component-Orient-Architecture),同時提供了一個
WorkFlow UI 供使用者使用,由使用者角度來看,WWF開啟了
另一種設計模式,使用者可以使用開發者所提供的Compoent,
依照自己的需求來架構應用程式,例如一個訂單動作,開發者將
儲存訂單,驗證訂單,排定出貨等細節動作全寫成Component,
設計者則使用WorkFlow Designer來整合訂單處理流程,他可
以選擇略過排定出貨的流程,或是改變驗證訂單的Component,
連一行程式都不用寫,全靠拖拉完成.

就個人來看,WWF 適合兩種人,一種是架構師,一種是分析師,
架構師利用WWF 來定義流程的Components,交給設計師撰寫,
分析師利用WWF來驗證並調整流程的動向.

Thursday, September 15, 2005

Linq

PDC 05 上揭露了C# 3.0 及Linq Project,什麼是Linq 呢? 簡單的說,Linq 是一個語言層級
的查詢語法Library,她可以讓我們以類SQL 語法的方式來查詢語言中的變數,例如陣列,
Collections. 以實例來說:

static void ObjectQuery()
{
var people = new List()
{
new Person { Age=12, Name="Bob" },
new Person { Age=18, Name="Cindy" },
new Person { Age=13 }
};
var teenagers = from p in people where p.Age > 12 && p.Age < 20 select p;
Console.WriteLine("Result:");
foreach(var val in teenagers)
{
Console.WriteLine("> Name = {0}, Age = {1}", val.Name, val.Age);
}
Console.ReadLine();}

class Person
{
public int Age;
public string Name;
}

Person是一個類別,ObjectQuery 函式中以Generic List建立了一個Person的Collection,
此處的var 型別是C# 3.0新增的型別, 從語言面來看,這個型別可以被指定為任何型別,
就像是Variant一樣,從Complier面來看,它是一個Lazy-determine型別,由Complier於編譯
期間來決定真正的型別,接下來的奇特語法就是Linq.
var teenagers = from p in people where p.Age > 12 && p.Age < 20 select p;
是不是覺得很像SQL呢? 這段程式碼的意思是,由people中選出Age大於12小於20的元素,
除了這種簡單的查詢之外,Linq 也支援Join,Distinct等語法.
基本上Linq只是一組Library,C# 3.0及VB.NET 9.0的Complier利用了這個Library來實現
上面的新語法,所有的特殊語法都會被編譯器編成使用Linq Library的程式.

Linq 讓程式語言又進化了.

Tuesday, September 13, 2005

期待以久的Binding.ReadValue

以往在Windows Form中,假如我們在ColumnChanged,ColumnChanging更改某欄
位的值後,Binding Control是不會跟著更新的,而是要等到EndEdit才會更新,在.NET 2.0
中,Binding提供了ReadValue方法,可以強制Binding Control重新取值.
以下的範例展示如何使用ReadValue.

protected virtual void UpdateControlValue(CurrencyManager currencyMangaer)
{
foreach (Binding bind in ((ICurrencyManagerProvider)
_bindingSource).CurrencyManager.Bindings)
bind.ReadValue();
}

public void UpdateControlValue()
{
UpdateControlValue(((ICurrencyManagerProvider)
_bindingSource).CurrencyManager);
}

被封印的Windows Form Inheritence.

對於一個寫了多年Delphi的人來說,不能應用Form Inheritence,
簡直跟沒法寫程式一樣難過,.NET 並非不支援Form Inheritence
,但是DataGridView只允許ReadOnly繼承這點就把Form Inheritence
的實用性從100 down 到10,雖然課堂上我寫了個新的DataGridView來
解決這個問題,但我仍然對ReadOnly Inheritence困惑.....封印的原因大
概是Code Parsing 困難,但....真的有這麼困難嗎?

殘破的系統 -- CTP 之罪

在連續幾個月的VS 2005 CTP裝卸之後,我的系統終於亂到
了無法安裝VS 2005 RC了,在多方嘗試下,我找到了一些小技巧
來移除先前所安裝的CTP,通常VS 2005本身的安裝都不會有太
大的問題,問題在於SQL Server Express及SQL Server 2005 CTP,
當你遭遇到SQL Server告知你因系統中含有不相容的.NET Framework,
SQL Server CTP時,你要做的第一件事是到新增移除程式中查看是否有
前版CTP存在,有的話將它移除,之後若仍然無法安裝,那麼請至
http://www.huydao.net/setup/msizap.zip下載此程式,接著到
C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\Log目錄中
查看Log,其中會告訴你因為那些CTP存在,所以無法安裝,將那些機碼記下,
一一使用msizap來移除,如:
msizap -T {機碼}
結束後重新開機,你應該能安裝SQL Server CTP了.
當然,這還是有風險的....Good Luck.

Friday, September 09, 2005

From Delphi to .NET

最近幫某軟體公司所規劃的教育訓練課程已接近結束,
這套課程以Windows Form 為主,教導學員們如何使用
Windows Form來開發應用程式,由於原學員多是使用
Delphi 開發MIS系統,習慣了DELPHI那種快速與方便
的開發流程,在引導他們至.NET 的過程中,學員們常提
出DELPHI 中曾使用的技巧做為問題,詢問我在.NET中
如何做到,例如TField.GetText/SetText,計算欄位,Lookup
等等. 不可否認,這些東西在目前的.NET 中並未提供,即使
有提供,也不完整或是有Bug,為此我特別做了幾個Compoennt,
展示如何解決這些問題,經過這些課程後,我更確認.NET Windows
Form 可以像Delphi 般快速的開發應用程式,也確認了當初Delphi
的深謀遠慮. Delphi敗在品質與策略,資本,而不是技術.

Thursday, September 08, 2005

近況

9/14將結束為時長達三年的技術顧問工作,
期間寫了為數不少的雜誌專刊及一本書,
技術顧問的工作不算輕鬆,動手去做,動口解決
問題,比起工程師,顧問工作更不允許犯錯,一個
錯誤會使成員走不少冤枉路,雖然如此!我還是
蠻Enjoy 這樣的工作型態,今年剩下的幾個月,
我不打算再接顧問工作,主因是近期幫一家公
司所規畫的Windows Form課程講完後的感覺
還不錯,客戶的反應讓我打算持續做.NET 教育訓練,
未來除了Windows Form外還會規畫ASP.NET 課程,
並籌劃一本.NET新書.

My Book


本書主軸環繞著元件設計技巧,由淺入深探討如何撰寫各式ASP.NET元件,與一般元件技術書籍不同,於本書中您常會發現立於元件使用者角度思考的痕跡,讓使用者舒適的使用元件,是一個元件設計師的義務。書中同時深入解析ASP.NET的運行模式,領您走入重幕後的秘境,知其然且知其所以然。除了提供幾近商業化元件的範例外,書中第六章為您拉開IDE的七彩幻幕,探討最深層的IDE運作模式,讓IDE成為您我元件活躍的舞台。是的,這不是一本為初學者所撰寫的書籍,但也不是一本只有高階設計師才能看的書籍,您可以於導讀一節中找到閱讀此書所需的基本功,基本上我將此書讀者層定位於”看得懂C#,玩過ASP.NET”。*深入解析ASP.NET運行模式*由淺入深的元件範例*IDE運作模式解密*Mobile Controls設計技巧