添加業務域對象
設定根節點的名稱為MoneyModel然後設定New_ModelRoot節點名稱為MoneyModelRoot同時別忘了設定MoneyModel的Model root class屬性為MoneyModelRoot後面的所有類都將從MoneyModelRoot類派生
在右鍵菜單中選New Class命令創建新的類Person和AcctItem設定它們的SuperClass屬性為MoneyModalRoot
添加屬性
在模型編輯器的樹視圖中選擇AcctItem類使用右鍵菜單中的Add Attribute來添加AmountHappenDate和Name屬性設置所有屬性為Persistent類型表示這些屬性的值要保存到數據庫中設定屬性的數據類型為Currency編輯界面示意如下
添加關聯
選中MoneyModel節點然後在右鍵菜單中選擇New Association命令創建PayAssoc關聯命名關聯的兩端角色為Pay和Money每個角色的設置如下
Pay: 選擇AcctItem作為角色的類關閉Embed checkbox並選擇*作為多重度因子
PayPerson: 選擇Person作為角色的類設定多重度為
編輯界面示意如下
通過上面一系列的操作我們就完成了整個的建模工作它同前面的UML模型是完全等價的
添加用戶界面
要想使一個應用程序可以跑起來我們還必須做一些界面工作在CMoneypas 單元中添加BoldAFPDefault和CDataModule到uses部分BoldAFPDefault使得Bold for Delphi可以自動生成Bold控件可調用的商業對象的編輯界CDataModule單元則使Bold組件可以獲知數據模塊中的模型從Bold Handles組件面板上拖動個BoldListHandle控件到窗體上然後從Bold Controls組件面板上拖放個BoldNavigator和個BoldGrid組件分別用於顯示人員和賬目信息列表另外還要添加個標准的Label控件來添加界面描述界面示意圖如下
其中BoldListHandle組件就相當於在數據庫開發中的DataSource數據源兩者的主要的區別是BoldListHandle中的數據是對象實例而DataSource中的數據是數據庫記錄而BoldGrid和BoldNavigator則對應於數據感知組件中的DbGrid和DbNavigator組件區別就是DbGrid中編輯的是數據庫記錄而BoldGrid中編輯的是對象屬性
在數據庫開發中需要將數據源同數據感知組件綁定同樣為了編輯對象數據也要將BoldListHandle同對象感知組件BoldNavigator和BoldGrid進行綁定設定BoldNavigator和BoldGrid的BoldHandle為相應的數據源設定後的結果如下
在普通數據庫開發中除了要有DataSource外還要有同DataSource綁定的數據集DataSet同樣的BoldListHandle對應於DataSource也要同DataMoudle中的BoldModel進行綁定而Bold中的BoldSystemHandle組件就對應於TDataBase包含了對象模型中所有對象實例因此設定兩個BoldListHandle組件的RootHandle屬性為DmMoneybshMoney這還不算完因為現在BoldListHandle是要分別獲得人員和賬目的相關信息而要指定對象DataBase中的對象DataSet在Bold中指定不同的對象集合需要使用OCL語言雙擊BoldListHandle的Expression屬性會彈出一個OCL語言編輯器如下圖示意
前面提到了OCL語言是一種標准的對象查詢語言這裡先不詳述後面會進一步的介紹這裡為了獲得全部人員信息的列表的話需要輸入PersonallInstances表達式同樣獲得賬目列表信息的話需要設定BoldListHanlde的Expression屬性為AcctItemallInstances
設定好BoldHandle的屬性後右擊BoldGrid然後選擇Create Default Columns命令會創建對應於對象元數據的字段最後還要在添加DataModule的OnDestroy事件處理函數
procedure TDmMoneyDataModuleDestroy(Sender: TObject);
begin
//更新數據庫
bshMoneySystemUpdateDatabase;
end;
上面語句確保運行時錄入的信息將被保存到XML文件中最後運行程序輸入一些信息的效果圖示意如下
Bold同傳統數據庫開發的區別
兩者之間最重要的不同就是元數據Borland的控件感知的是數據庫表字段的結構定義元數據而Bold控件感知的是類的定義元數據兩者另一個重要的區別就是數據的同步的處理方式在傳統的數據庫程序中我們想同步不同網格中的數據的話可以使用下列方法
A) 多個查詢
三個網格控件每個連接到不同的SQL數據源來獲取數據 每次更新任意網格的數據時重新運行這些查詢來更新這要求我們進行大量代碼編寫並且要仔細考慮數據集的狀態比如當前數據集是否處於編輯模式等
B)過濾網格
通過使用單一查詢並借助於某些更為強大的第三方的帶有內置的過濾功能的網格控件我們可以稍微簡單一些的實現這個功能但依賴於SQL表達式的查詢會產生一個只讀的數據集同時對第三方控件的依賴也是不好的問題
而在Bold中我們可以隨意的修改任何對象的值所有的變動會自動的同步更新Bold for Delphi還支持各種方法來確保同步可以在網絡上的不同機器間實現由於篇幅限制這種功能將不在本文中討論
From:http://tw.wingwit.com/Article/program/Delphi/201311/24784.html