亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

如何將界面代碼和功能代碼分離(基于Delphi/VCL)

2019-11-18 18:52:37
字體:
來源:轉載
供稿:網友

    很多朋友看了上次我寫的“創建良好設計的代碼(基于Delphi/VCL)”后,對我說感覺上可以接受其中的觀點,但似乎說得太簡單,不夠具體;也有的朋友對其中的一個小例子有些異議。因此便有了此文。

    上次,我舉的例子是這樣的:假設要從某處獲得一個字符串列表,然后顯示于 TListBox 中,我所推崇的代碼是:
    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類的實現的任何更改,都不會影響界面部分。維護代碼的時候,將更改局限于某一個模塊中的做法是非常明智的。
   
   
Nicrosoft(nicrosoft@sunistudio.com) 于 2001.7.14


上一篇:DELPHI的原子世界(2)

下一篇:在Delphi的DBGrid中插入其他可視組件

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕视频一区二区在线有码| 久久天天躁狠狠躁夜夜爽蜜月| 中文字幕精品久久| 久久九九全国免费精品观看| 98午夜经典影视| 亚洲国产黄色片| 黄色精品一区二区| 国产精品视频久久久久| 久久久国产在线视频| 九九九久久国产免费| 欧美日韩国产丝袜美女| 亚洲精品成a人在线观看| 91久久国产精品91久久性色| 国产做受高潮69| 久久久91精品| 亚洲欧洲高清在线| 久久成人一区二区| 欧美多人乱p欧美4p久久| 91亚洲国产成人久久精品网站| 国产精品永久免费观看| 欧美午夜美女看片| 麻豆国产va免费精品高清在线| 69av在线播放| 亚洲天堂2020| 91福利视频网| 亚洲欧美国产精品久久久久久久| 亚洲欧美国产一区二区三区| 亚洲美女在线看| 久久6精品影院| 日韩视频―中文字幕| 国产成人免费av电影| 国产精品亚洲自拍| 久久香蕉国产线看观看av| 亚洲欧美综合精品久久成人| 日韩av片永久免费网站| 亚洲新声在线观看| 久久福利网址导航| 精品久久久久久久久久久久久久| 91国产视频在线播放| 亚洲成人精品视频在线观看| 成人日韩在线电影| 成人欧美一区二区三区黑人孕妇| 国产美女91呻吟求| 久久精品国产v日韩v亚洲| 国产日韩精品综合网站| 91精品国产高清| 亚洲人成在线免费观看| 欧美成人黑人xx视频免费观看| 欧美又大又粗又长| 激情懂色av一区av二区av| 欧美尤物巨大精品爽| 欧美肥婆姓交大片| 亚洲精品一区二区三区婷婷月| 国产精品你懂得| 欧美交受高潮1| 成人午夜小视频| y97精品国产97久久久久久| 亚洲欧美日韩成人| 尤物精品国产第一福利三区| 免费91麻豆精品国产自产在线观看| 久久久噜噜噜久久中文字免| 日韩成人在线视频| 伦理中文字幕亚洲| 国产精品美女久久久久av超清| 欧美综合第一页| 91精品视频观看| 色久欧美在线视频观看| 91av在线不卡| 国产日韩中文字幕在线| 久久在线精品视频| 欧美激情亚洲综合一区| 人人澡人人澡人人看欧美| 精品视频在线观看日韩| 日韩在线视频观看正片免费网站| 成人在线视频福利| 午夜免费在线观看精品视频| 欧美成人高清视频| 国产第一区电影| 在线观看日韩av| 欧美精品videos性欧美| 亚洲美女中文字幕| 欧美国产欧美亚洲国产日韩mv天天看完整| 一色桃子一区二区| 欧美日韩国产麻豆| 亚洲国产精品久久91精品| 57pao成人国产永久免费| 中文字幕欧美视频在线| 九九视频直播综合网| 精品福利免费观看| 狠狠色狠狠色综合日日五| 精品美女久久久久久免费| 欧美贵妇videos办公室| 日本韩国欧美精品大片卡二| 欧美天天综合色影久久精品| 亚洲精品国产精品乱码不99按摩| 午夜精品99久久免费| 国产精品久久久久久久久久久不卡| 91视频国产高清| 亚洲色图欧美制服丝袜另类第一页| 日韩少妇与小伙激情| 一区二区欧美亚洲| 播播国产欧美激情| 欧美日韩国产麻豆| 国语自产精品视频在线看一大j8| 色妞色视频一区二区三区四区| 欧美午夜女人视频在线| 亚洲老司机av| 成人春色激情网| 91在线视频一区| 韩国v欧美v日本v亚洲| 亚洲福利视频二区| 久久久综合免费视频| 国产精品中文字幕久久久| 亚洲综合成人婷婷小说| 亚洲人成伊人成综合网久久久| 欧美整片在线观看| 亚洲精品自拍第一页| 日韩精品中文字幕有码专区| 亚洲乱码一区av黑人高潮| 97超级碰碰人国产在线观看| 中文字幕日韩在线播放| 日韩精品在线免费观看视频| 国产在线拍揄自揄视频不卡99| 91久久精品国产91性色| 亚洲人成电影在线| 国产精品成久久久久三级| 欧美视频在线观看免费网址| 久久天堂电影网| 亚洲激情国产精品| 欧美国产精品人人做人人爱| 欧美日韩一区二区免费视频| 欧美猛交免费看| 中文字幕欧美日韩va免费视频| 九九热这里只有精品免费看| 亚洲福利视频二区| 亚洲国产91精品在线观看| 精品久久久久久久久久国产| 亚洲午夜久久久久久久| 国产精品久久久久久av| 久久视频在线播放| 久久免费精品日本久久中文字幕| 久久久精品中文字幕| 黄色精品在线看| 日韩av手机在线看| 亚洲japanese制服美女| 午夜剧场成人观在线视频免费观看| 久久久久久亚洲精品中文字幕| 国产在线观看91精品一区| 亚洲国产精彩中文乱码av在线播放| 欧美日韩国产黄| 精品国产电影一区| 久久综合电影一区| 色哟哟亚洲精品一区二区| 日韩免费黄色av| 日本a级片电影一区二区| 色狠狠av一区二区三区香蕉蜜桃| 亚洲最大成人在线| 97在线精品视频| 国产精品丝袜久久久久久高清| 久久99久国产精品黄毛片入口| 日韩精品www| 日韩精品久久久久久久玫瑰园| 中文精品99久久国产香蕉| 欧美在线亚洲一区|