【发布时间】:2012-09-15 11:53:03
【问题描述】:
伙计们,
有一个关于 Delphi 和 Datasnap 的信息我仍然无法找到或弄清楚......想象一下我想把我所有的智能都放在服务器层。在这种情况下,当然,我将使用面向对象的概念,创建大量的类,每个类都有自己的方法和属性。由于在每个示例中我看到客户端只检索一个服务器类的信息,我想知道:无论如何,是否有可能使用多个类,或者我是否仅限于一个包含一堆不同方法的类?
你们明白吗?
感谢您的帮助,
保罗
【问题讨论】:
伙计们,
有一个关于 Delphi 和 Datasnap 的信息我仍然无法找到或弄清楚......想象一下我想把我所有的智能都放在服务器层。在这种情况下,当然,我将使用面向对象的概念,创建大量的类,每个类都有自己的方法和属性。由于在每个示例中我看到客户端只检索一个服务器类的信息,我想知道:无论如何,是否有可能使用多个类,或者我是否仅限于一个包含一堆不同方法的类?
你们明白吗?
感谢您的帮助,
保罗
【问题讨论】:
目前还没有有用的答案,所以我决定给出一个。 在给定的大多数示例中都有一个 TWebDataModule 如果没有,您可以在删除 DSServer 组件的地方使用数据模块。在那里你会发现 DSServerClass(1) 负责公开一个类的服务器方法。
所以你可以做的是把另一个DSServerClass放到模块中。现在在 ObjectInsepecor 中转到 properties -> Server 设置默认服务器,其名称可能为 DSServer1(示例中的默认服务器)。转到 Events --> OnGetClass 双击,以便将处理程序分配给相同的处理程序。
现在
你可以这样写(你可以查看现有的第一个 DSServerclass1 以供参考)
设置PersistentClass := ServerMethodunit1.user; 这里user是方法需要暴露的类名。
【讨论】:
DataSnap 服务器向客户端公开多个类没有问题。只是看看样品。甚至“基本”示例服务器也公开了三个服务器类。
【讨论】:
Facade是这个场景的一个有用的设计模式 - 许多业务类必须通过通信层与“外部”客户端应用程序通信。
Facade 是一个对象,它为更大的对象提供简化的接口 代码体,例如类库。
对于客户端,外观暴露了方法,这些方法反过来调用您的业务类的实例。
这还有一个优势,即您的业务模型类可以在 API 保持稳定的同时发展。
您还应该考虑 Data Transfer Objects,这是一种避免暴露内部对象类和数据结构以实现更好封装的设计模式。
【讨论】: