CnPack Forum


 
Subject: 各位老师,请看下列需求该如何设计?
sdshw
新警察
Rank: 1



UID 978
Digest Posts 0
Credits 38
Posts 21
点点分 38
Reading Access 10
Registered 2005-8-8
Status Offline
Post at 2011-1-17 14:12  Profile | Blog | P.M. 
各位老师,请看下列需求该如何设计?

各位老师,请看下列需求该如何设计?

有个数据处理类 TDataProcess 负责分析处理数据,处理完成后要交给UI展示数据,
展示的UI要有多种风格

我本来是这样设计的:
IShowUI = interface         //展示数据的接口 比如显示日志数据、显示图像数据等等
   procedure ShowDataA;
    procedure ShowDataB;
  ...
end;

TDataProcess = class

private

public
   UI: IShowUI; //把数据展示做成接口  

end;

TShowUI_1 = class(TForm, IShowUI)
  //实现IShowUI接口
end;

TShowUI_2 = class(TForm, IShowUI)
  //实现IShowUI接口
end;

这样设计,每个展示Form可视化的设计界面并各自去实现接口就可以了
但是,我对接口的了解不是很深刻,特别是关于生存期、释放之类的
所以,我想请问各位老师,如果不使用接口的话,满足该需求该如何设计呢
Top
zzzl (早安的空气)
版主
Rank: 7Rank: 7Rank: 7



UID 590
Digest Posts 0
Credits 399
Posts 199
点点分 399
Reading Access 100
Registered 2004-11-29
Status Offline
Post at 2011-1-17 21:35  Profile | Blog | P.M.  | QQ
规则很简单,引用计数为0时就释放了。

你的设计并不坏啊,但从显示日志和显示图像这两个需求中抽象出接口好象有点困难? 另外,你的TDataProcess 和 IShowUI 好象是在一个线程里的,这样如果以后要把 TDataProcess 放到线程中,就要小心VCL同步的问题。

最简单的方法是让TDataProcess 给UI发消息,数据包就是消息参数。
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6756
Posts 3554
点点分 6756
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2011-1-17 23:02  Profile | Blog | P.M. 
如果如楼上所说能抽象出共同的接口,那还是用接口优雅些。或者用抽象虚基类,但本质上和接口也是类似的,只不过Delphi不支持多重继承,所以还是接口方便。IDE的对外开放的OpenTools API都是通过接口实现的。
Top
sdshw
新警察
Rank: 1



UID 978
Digest Posts 0
Credits 38
Posts 21
点点分 38
Reading Access 10
Registered 2005-8-8
Status Offline
Post at 2011-1-17 23:07  Profile | Blog | P.M. 
回复 #2 zzzl 的帖子

多谢zzzl老师的耐心指导

针对我的问题,说白了我就是想让数据处理和展示分层,并且有多种展示风格
每个UI展示的数据是一样的(我理解为比如接口中有10个函数,就是展示10类数据)

另外,TDataProcess确实是工作在线程中的(使用了Indy的IdTcpServer,每个Client一个线程,大约200个Client)
线程中我已做过同步处理(Synchronize),但是感觉处理的相当别扭
因为Synchronize传递参数很不方便,必须为每类数据放一个成员变量

用发消息的方式确实是个好办法,但是UI在相应消息的时候,必须要清楚传递的数据结构,感觉稍微有点不爽 呵呵
Top
sdshw
新警察
Rank: 1



UID 978
Digest Posts 0
Credits 38
Posts 21
点点分 38
Reading Access 10
Registered 2005-8-8
Status Offline
Post at 2011-1-17 23:13  Profile | Blog | P.M. 
回复 #3 Passion 的帖子

LiuXiao老师,抽象虚基类您指的是带virtual; abstract;关键字的吗?
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6756
Posts 3554
点点分 6756
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2011-1-18 18:53  Profile | Blog | P.M. 
对。不过Delphi低版本中没有纯的虚基类的说法,virtual abstract一般是指抽象虚方法。
应用起来就是这个意思。
Top
 




All times are GMT++8, the time now is 2024-4-19 21:49

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.005823 second(s), 7 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP