程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi中實現界面與業務邏輯的分離

Delphi中實現界面與業務邏輯的分離

編輯:Delphi

在做Delphi軟件開發之前,我從事Java軟件的開發工作,從Java開源社區我學到了很多軟件的設計理想,這也許就是我從Java那裡得到的回報啊! 開闊了眼界!

最近的項目是用Delphi開發,所以我又看起了Delphi,一個月的時間裡我看了差不多看了4本Delphi方面書籍,在做Delphi項目的時候我更是用Delphi的語法,Java的思想來進行軟件的開發與設計,感覺有些累!啊,閒話少說啊,進入正題吧!

Delphi是一個快速軟件開發的IDE,通常的Programmer 都是先畫VIEw(界面) ,然後在在相應的事件裡面書寫Source Code,看事例:

1、比如我要向數據庫中插入一條記錄,通常的做法是這樣吧!

SQL Example:  Insert   Into   ExampleTable1 (Field1,Field2,FIEld3) Values(Values1,Values2,Values3)

現在假設這個Delphi窗體上有三個TEXT控件,Name分別為 Frist,Second,Three

下面我用三種不同方法將數據插入到數據庫中:

1、直接插入
  clIEnt  ---------->  Database

Insert   Into   ExampleTable1 (Field1,Field2,FIEld3) Values(Frist.text,Second.text,Three.text)

2、間接插入
   clIEnt  ---(Text傳遞)--->  dataClass ------->  Database

意思是先將該窗體數據保存到一個數據類中去,然後在由用戶從這個數據類中取數據,將這些數據
  傳到數據庫中去

注意:
  窗體控件是直接通過TEXT將數據存儲到(dataClass)數據類中去的。
  這個dataClass只是用於存儲數據狀態的,裡面全是屬性,沒有業務邏輯的實現!

如下:
  {---------------------------------------------
    author:zhuam
    date:2004/09/04
    type:class
    property:all AssociatorRunBean Information Set Mothed
    descripte: 用於保存會員的行駛證信息 ,
  -----------------------------------------------}
  type
    TAssociatorRunBean=class(TObject)
    private
      FKiloMetre: Double;
      FCarNumber: string;
      FNumber17: string;
      FCarColor: string;
      FAssociatorID: string;
      FCarCapacity: string;
      FFrameNumber: string;
      FEngineNumber: string;
      FAvailabilityDate: TDate;
      FRegisterDate: TDate;
      FBackPicture:TImage;
      FFrontPicture: TImage;
      FLeFTPicture: TImage;
      FRightPicture: TImage;
      function getBackPicture: TImage;
      function getFrontPicture: TImage;
      function getLeFTPicture: TImage;
      function getRightPicture: TImage;
      procedure setAssociatorID(const Value: string);
      procedure setAvailabilityDate(const Value: TDate);
      procedure setBackPicture(const Value: TImage);
      procedure setCarCapacity(const Value: string);
      procedure setCarColor(const Value: string);
      procedure setCarNumber(const Value: string);
      procedure setEngineNumber(const Value: string);
      procedure setFrameNumber(const Value: string);
      procedure setFrontPicture(const Value: TImage);
      procedure setKiloMetre(const Value: Double);
      procedure setLeFTPicture(const Value: TImage);
      procedure setNumber17(const Value: string);
      procedure setRegisterDate(const Value: TDate);
      procedure setRightPicture(const Value: TImage);
    public
      constructor create;
      destructor destroy;override;
      property  AssociatorID:string read FAssociatorID write setAssociatorID;    //會員號碼
      property  CarNumber:string read FCarNumber write setCarNumber;             //車牌號碼
      property  CarColor:string read FCarColor write setCarColor;                //汽車顏色
      property  CarMode:string read FCarColor write setCarColor;                 //車型
      property  EngineNumber:string read FEngineNumber write setEngineNumber;    //發動機號碼
      property  FrameNumber:string read FFrameNumber write setFrameNumber;       //車架號
      property  CarCapacity:string read FCarCapacity write setCarCapacity;       //排量
      property  Number17:string read FNumber17 write setNumber17;                //17位號
      property  KiloMetre:Double read FKiloMetre write setKiloMetre;             //公裡數
      property  RegisterDate:TDate read FRegisterDate write setRegisterDate;     //注冊日期
      property  AvailabilityDate:TDate read FAvailabilityDate write setAvailabilityDate; //有效日期
      property  FrontPicture:TImage read getFrontPicture write setFrontPicture;
      property  BackPicture:TImage read getBackPicture write setBackPicture;
      property  LeftPicture:TImage read getLeftPicture write setLeFTPicture;
      property  RightPicture:TImage read getRightPicture write setRightPicture;

end;

Insert   Into   ExampleTable1 (Field1,Field2,FIEld3) Values(AssociatorRunBean.Frist,AssociatorRunBean.Second,AssociatorRunBean.text)

3、間接插入
   clIEnt  ---(自定義property傳遞)--->  dataClass ------->  Database

意思是先將該窗體數據保存到一個數據類中去,然後在由用戶從這個數據類中取數據,將這些數據
  傳到數據庫中去

注意:
  窗體控件是直接通過的自定義property將數據存儲到(dataClass)數據類中去的。
  這個dataClass只是用於存儲數據狀態的,裡面全是屬性,沒有業務邏輯的實現!

Insert   Into   ExampleTable1 (Field1,Field2,FIEld3) Values(AssociatorRunBean.Frist,AssociatorRunBean.Second,AssociatorRunBean.text)

說到這裡有人會問我,這樣實現有什麼意義哩!細心的同志也許已經有所察覺啊!
  這正是完成Delphi界面與業務邏輯的分離的一種手段啊

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved