在Delphi中,DataModule(dm)是什么?

25

在您的项目中使用DataModule有什么目的?与普通类或模块相比,它有什么特殊属性吗?通常用于什么样的约定?


7
@iManBiglari,这不是这里的每个问题吗? - Uwe Raabe
2
+1;好问题!很多人甚至不考虑 DM 可以用在哪里。 - Jeroen Wiert Pluimers
1
这是一种基本的“分离关注点”的方式。通常,您使用它来将数据访问和UI显示数据分开。 - Nick Hodges
1
这根本不是关注点分离,只是一种通过从 .dfm 文件中读取组件属性来设置它们的方式。 - David Heffernan
TService 这样的东西也是从数据模块派生出来的吗? - Jerry Dodge
5个回答

21
一个数据模块是一个非可视的“窗体”(容器),可以包含非可视组件(通常是数据库组件,但也可以添加任何组件,比如对话框和Indy组件),然后可以由多个窗体共享。
这个维基页面进一步解释了:Delphi Wikki

+1;简洁又实用的要点。我通常会有一个名为TXyzActionDataModule的模块,其中包含一些TAction实例(打包在TActionList或类似的东西中),用于一组围绕某个共同的Xyz特性相关的窗体/框架。 - Jeroen Wiert Pluimers
+1,说到这个,在Delphi XE2中,我记得曾经尝试将非数据库组件添加到数据模块中,但只有与数据库相关的组件会显示在调色板中... 从那时起,我已经能够这样做了。 - Jerry Dodge

11

通常用于将Dataset和DataSource对象保存在中央位置。DataModule只能包含非可视化组件,但不仅限于数据访问组件。您可以在其上放置TTimer和SaveDialog等组件...

当您有多个窗体时,只需要在一个地方更改代码,而不是每个窗体都更改,这时它会非常有用。


11

数据模块与简单类不同,它可以在表单设计器中设计,并且其组件可以使用对象检查器进行编辑。 数据模块还具有一个资源,该资源会在 DFM 文件中进行流传输。

此外,数据模块可以被其他数据模块、窗体和帧使用,那么其组件也可用于对象检查器的选择。


7
在我的桌面应用程序中,通常有一个数据模块包含一组 TImageList。如果我的应用程序使用 TCP/IP,则这些组件位于单独的数据模块中。当然,几乎所有的应用程序逻辑都在不同的数据模块中。如果我需要创建一个服务应用程序,则将逻辑放在数据模块中,以便可以轻松地创建用于调试的桌面应用程序。最后,但并非最不重要的是,我大多数时候将我的数据访问组件放在数据模块上。

0

就像是一个可重复使用的视觉单元/类别的东西——非视觉组件的熔炉(基于类别)。


你为什么要回答这个问题,给出如此模糊的答案?你的回答对现有的答案有何补充? - Freddie Bell
同时比较类和数据模块在代码可重用性方面的优劣。同时提到其目的。模糊与教科书定义的区别取决于你从哪个层次来看。重要的是本质和直觉。 - user30478

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接