在过去的3年里,我一直在学习德尔福,业余爱好/职业水平。我很高兴地说,我现在已经发展到可以用恐怖和尴尬的方式回顾我的早期代码。所以我现在正在浏览一些早期的应用程序并重写/重构它们。
我试图摆脱的一个坏习惯是从另一个单元访问一个表单上的组件。为了实现这一点,我一直在尝试使用框架作为信息隐藏的方法。因此,我没有在其上创建包含组件的表单,而是创建一个框架来保存所有表单组件,然后将框架放在表单上,将框架声明移动到私有声明中,
type
TMyForm = class(TForm)
private
MyFrame: TMyFrame;
procedure SetTimeDate(const Value: TMyItem);
function ReadTimeDate:TMyItem ;
然后在表单初始化部分
中注册帧initialization
begin
RegisterClasses([TMyFrame])
然后我在表单单元的公共部分声明了我需要的属性,它可以访问框架及其组件。
public
property TimeDate: TOverlayItem read ReadTimeDate write SetTimeDate;
我也在使用框架来整合经常重复的组件组。
这似乎适用于我想要的目的(隐藏Myframe及其组件),但其他人是否有过这种方法的经验?
使用框架有任何缺点吗? 我真的从中获益吗? 在框架内使用嵌套框架有任何问题吗? 在Delphi中使用框架有什么好的练习指南吗? 对于Delphi中的GUI信息隐藏,是否有更好/更简单的方法来实现相同的效果?
HMcG
答案 0 :(得分:3)
听起来你的UI层中仍然有很多逻辑。表单/面板不应具有那么多的Value属性(可能对话框除外)。
如果你想要更多的结构而不是读取MVC模式。
说了这么多,Frames可以成为组织GUI的好方法。和所有事情一样,不要过度使用。
答案 1 :(得分:0)
我喜欢框架通常用于创建复杂的可重用位。在大多数情况下,我认为它们可以是构建屏幕的一种非常干净的方式。但是,正如Henk Holterman所提到的,您的屏幕和框架应该只包含与UI功能相关的逻辑,并尽可能地忽略业务逻辑。
在UI中隐藏了几个重点和信息:
所以不要像这样的代码:
ClientForm := TClientViewForm.Create(Self);
try
ClientForm.Client := MyClient;
ClientForm.ShowModal;
finally
ClientForm.Free;
end;
我通常会强迫人们写一些类似的东西:
ClientViewer := TClientViewer.Create(MyClient);
try
ClientViewer.Show;
finally
ClientViewer.Free;
end;
甚至
TClientViewer.ShowClient(MyClient);
并让类方法ShowClient处理第一个列表中显示的位。这样调用代码永远不会接收表单指针,也不能触及包装类没有专门提供的任何位。