如何將界面代碼和功能代碼分離 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
如何將界面代碼和功能代碼分離(基于Delphi/VCL)ObjectXXX := TObjectXXX.Create; ListBox1.Items := ObjectXXX.GetStringList; ObjectXXX.Free;的確,我承認,單純從這三行代碼來看,似乎有了“濫用對象”之嫌。也許是例子過于簡單,給人的感覺是TObjectXXX只有GetStringList這一個public成員函數,如果真的這樣的話,那可真是“濫用對象”了。類是對對象的抽象,而對象是由狀態和操作(也就是數據和對數據的操作)的集合組成。因此,沒有狀態的對象不是對象!沒有私有數據成員的類的設計是失敗的設計(那不是類,而是接口了)。 好,下面我就舉一個詳細的例子來說明,如何將界面代碼和功能代碼分離。 假設我要做一個簡單的個人通訊錄管理軟件,很顯然,整個軟件分為兩部分:一部分是面象用戶的,也就是所謂界面部分,我可以提供四個按鈕(分別為“添加”、“刪除”、“修改”、“查找”)和一個編輯框(顯示通訊錄信息和接受用戶輸入)用于和用戶交互;另一部分是功能化的,也就是軟件內部的對于通訊錄的存取操作。 于是,有了一個TAddrBook類,它是對功能化部分的抽象。 TAddrBook = class private //一些私有成員 public constructor Create; destructor Destroy;override; GetCount: Integer; FindRecord(strString): Integer; GetRecord(nIndex:Integer): String; SetRecord(nIndex:integer; strRec:String): Boolean; AddRecord(strRec:String): Boolean; DelRecord(nIndex): Boolean; //其它共有成員函數 end;私有成員之所以無法確定,主要是取決于這個類的實現。 如此,可以將對通訊錄的存取操作的邏輯封裝。而界面部分的代碼不會涉及到這些存取邏輯。界面部分代碼如下: var form1: Tform1; AddrBook: TAddrBook; nCurRec: Integer; implementation procedure Tform1.formCreate(Sender: TObject); begin AddrBook := TAddrBook.Create; nCurRec := AddrBook.GetCount; end; procedure Tform1.formClose(Sender: TObject; var Action: TCloseAction); begin AddrBook.Free; end; //添加按鈕 procedure Tform1.Button1Click(Sender: TObject); begin if not AddrBook.AddRecord(memo1.Text) then ShowMessage("error"); end; //刪除按鈕 procedure Tform1.Button2Click(Sender: TObject); begin if not AddrBook.DelRecord(nCurRec) then ShowMessage("error"); end; //修改按鈕 procedure Tform1.Button3Click(Sender: TObject); begin if not AddrBook.SetRecord(nCurRec, memo1.Text) then ShowMessage("error"); end; //查找按鈕 procedure Tform1.Button4Click(Sender: TObject); begin memo1.Text := AddrBook.GetRecord(AddrBook.FindRecord(memo1.Text)); end;以上界面部分的代碼,不涉及任何存取邏輯,每個模塊的代碼簡單,易懂,便于維護。而實際上,該通訊錄是使用數據庫保存還是用文本文件來保存,界面代碼都不知道;使用數據庫的話,是通過ODBC還是ADO還是BDE訪問數據庫,界面代碼也不知道。實際上,這些存取邏輯的東西取決于TAddrBook類的實現,TAddrBook類的實現可以單獨的放在一個.pas文件中,對TAddrBook類的實現的任何更改,都不會影響界面部分。維護代碼的時候,將更改局限于某一個模塊中的做法是非常明智的。 網路志工聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
引言:介面 應該是 = interface 功能 應該是 = implementation 代碼 ? 是指 Code 嗎 ? 不太懂大陸人的用語 .... 可以解釋一下嗎 ? 還是可以 Post 英文版的文章呢 ? |
raylau
一般會員 發表:11 回覆:12 積分:4 註冊:2002-10-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |