Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29019495
  • 博文数量: 101
  • 博客积分: 4011
  • 博客等级: 上校
  • 技术积分: 1150
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-18 10:37
个人简介

落魄青年,挨踢民工,已经转行

文章分类

全部博文(101)

文章存档

2008年(47)

2007年(54)

分类:

2007-10-19 15:13:39

建立一个表现层

 

基于控件的GUI

一个可能的途径去设计用户界面是设计你自己的对业务对象有数据感知能力的界面控件.如果你打算在应用程序的多个部分都重复使用自己各个不同的界面组件,但是又不想相同的界面多次出现.或者你只想改变自己的程序的外观感觉不想改动太多地方, 这是个好主意.下面有个小的话题是关于建立基于组件的用户界面的.

 

为控件建立默认的GUI界面

这个例子显示了一个简单的地址编辑器演示了这个好处,那就是绑定一个业务对象到一个默认的图形用户接口上以便用户能操作和控制业务对象.业务对象的感知控件TaddressEdit是TcustomPanel的派生类,它绑定了一个业务对象Addressable. 开发一个控件能够绑定业务对象可以提高生产力,并且可以通过改变这个控件来改变应用程序的外观.如果这个控件是放在package里面,你要改变外观甚至都不用重新编译,把那个package换一下就行了.下面有TaddressEdit的代码.

 

你可能注意到仅仅增加了一个公共方法,这个方法让你能够绑定它到一个业务对象.它将这个抽象的Taddressable业务类作为参数.这样这个控件就能用于多个不同的业务类了.

 

type
TAddressEdit = class(TCustomPanel)
private
      ds : TDataSource;
      dbAddr1, dbAddr2, dbCity, dbState, dbZip, dbPhone, dbApt :
TDBEdit;
      lAddr1, lAddr2, lCity, lState, lZip, lPhone, lApt : TLabel;
   protected
      constructor create(AOwner: TComponent); override;
      destructor destroy;
      procedure loaded; override;
   public
      procedure BindAddressable(BO: TAddressable);
   published
end;

为了把这个控件挂上业务对象,你只需要像下面这样做:

procedure TForm1.Button1Click(Sender: TObject);
begin
   AddressEdit1.BindAddressable(Addressable);
end;

基于Form(窗体)的 GUI

一个更通常设计Delphi程序的界面的途径是将它们做成Froms.这种方式允许你使用Delphi自带的所有的可视化控件工具,然后和迅速地建立用户界面.再说一次,我主要用这种方式来建立我的应用程序,因为这种方式能充分发挥它的优势—可视化设计.就像你平常建立应用程序一样就可以了.为确保你没有把GUI硬扯上业务规则,小心在GUI事件中的编码.这将迫使你中心化你的业务逻辑,并且在业务对象中为业务逻辑提供一个公共接口.

阅读(1893) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~