Delphi DataModule用法 - 单个还是多个?

时间:2010-11-23 14:16:08

标签: database delphi delphi-2009 datamodule

您好 我正在编写一个应用程序,有各种表单及其相应的数据模块。 我写道,他们通过在use classes中提到彼此使用(一个在实现中,另一个在接口中以避免交叉引用) 这种做法是错的吗?为什么或为什么不以这种方式使用? 感谢

4 个答案:

答案 0 :(得分:9)

我必须同意Ldsandon,恕我直言,在您的项目中拥有多个数据模块会更好。如果你把它看作模型 - 视图 - 控制器的东西,你的数据库就是模型,你的表格就是视图,你的数据模块就是控制器。

就我个人而言,我的项目总是至少有2个数据模块。一个数据模块用于在整个项目中共享Actions,ImageLists,DBConnection,......和其他内容。大多数时候这是我的主要数据模块。

从那时起,我为我的应用程序中的每个'Entity'创建一个新的数据模块。例如,如果我的应用程序需要处理或显示订单,cursomters和产品,那么我将为每个人和每个人提供一个Datamodule。

通过这种方式,我可以清楚地分离功能,轻松地重复使用零碎,而无需拉入所有内容。如果我需要与客户相关的东西,我只需使用客户数据模块即可。

此致

斯特凡

答案 1 :(得分:6)

没关系,特别是如果您要使用相关数据模块的不同实例创建多个相同表单的实例。

请注意VCL设计中的一个小问题:如果您创建两个相同表单及其数据模块的实例,则两个表单都将指向相同的数据模块(由于VLC解析链接的方式),除非您使用了一点创建数据模块实例时的技巧:

  if FDataModule = nil then
  begin
    FDataModule := TMyDataModule.Create(Self);
    FDataModule.Name := '';  // That will avoid pointing to the same datamodule
  end;

答案 2 :(得分:2)

超越镜子。我总是使用Forms而不是DataModules。我知道这不是共同点,请在downvoting之前阅读。

我总是使用Forms而不是DataModules。我称之为DataMovules。

我对逻辑上相关的每组表使用一个这样的DataMovule。

我使用Forms而不是DataModules,因为DataModule和Forms都是组件容器,并且两者都可以有效地用作数据相关组件的容器。

在开发过程中:

  • 我的应用程序更容易开发。表单使您有机会查看数据组件,从而轻松开发这些组件。
  • 我的应用程序更容易调试,因为您可以立即放置一些查看器组件,以便您可以实际看到数据。我通常会创建一个标签架,每个桌面有一个页面,每个页面都有一个数据网格,用于浏览桌面上的数据。
  • 我的应用程序更容易测试,因为您最终可能会操纵数据,例如尝试使用极端值进行压力测试。

开发后:

  • 我确实把形式变成了隐形。实际上它是一个DataModule,我喜欢与数据模块相同的容器功能。

  • 但有奖金。表格仍然存在,所以我最终可能会将其显示为问题确定。我使用关于此框。

不,我没有在申请规模或表现方面受到任何明显的惩罚。

我不打算打破MVC范式。我试着坚持下去。我不会将构成我的View的表单与构成我的控制器的DataMovule混合在一起。我不认为它们是我的观点的一部分。它们永远不会被用作我的应用程序的用户界面。 DataMovules恰好是Forms。它们只是方便的工程文物。

答案 3 :(得分:2)

仅适用于您的表对象的数据模块,如果您只有几个数据库,那么第一个数据模块就是一个很好的数据模块。

只有您的行动的数据模块才是另一个。

仅用于图像列表的数据模块是另一个很好的第三个数据模块。此数据模块仅包含图像列表,然后需要访问图像列表的表单可以在此共享位置使用它们。

如果您有200个表对象,可能只有一个数据模块用于数据库表。想象一下,一个应用程序有20个表与开发票,另外20个表与HR有关。我认为InvoicingDataModule和HRDataModule如果它们里面的表和对它们起作用的代码不需要彼此了解任何东西,或者甚至当一个模块具有“使用”依赖性时,它们将是分开的。在一个方向,但这种关系不是循环的。即便如此,更细粒度的数据模块模块化也是有益的。