gpt4 book ai didi

apache-flex - DDD 和客户端/服务器应用程序

转载 作者:行者123 更新时间:2023-12-02 23:56:49 24 4
gpt4 key购买 nike

我想知道你们中是否有人在客户端/服务器应用程序中成功实现了 DDD,并愿意分享一些经验。

我们目前正在开发 Flex 中的智能客户端和 Java 中的后端。在服务器上,我们有一个向客户端公开的服务层,它提供 CRUD 操作以及其他一些服务方法。我知道,在 DDD 中,这些服务应该是存储库,并且服务应该用于处理不适合存储库的用例。现在,我们在接口(interface)后面的客户端上模拟这些服务,并通过 IoC 容器注入(inject)实现(Web 服务、RMI 等)。

因此出现了一些问题:

  • 服务器是否应该向客户端公开存储库,或者我们是否需要某种外观(例如能够处理安全性)
  • 客户端是否应该实现存储库(以及一般的 DDD?),因为知道在客户端中,大部分逻辑与 View 相关,而真正的业务逻辑位于服务器上。与服务器的所有通信都是异步发生的,我们在客户端上有一个单线程编程模型。
  • 如何将客户端映射到服务器对象,反之亦然?我们尝试了 DTO,但又恢复到公开对象的状态并直接映射到它们。我知道这被认为是不好的做法,但它为我们节省了大量时间)

总的来说,我认为新一代应用程序将随着 Flex、Silverlight、JavaFX 的发展而出现,我很好奇 DDD 如何融入其中。

最佳答案

  1. 我不会直接向客户端公开存储库。您提到的第一个大问题是安全性:您不能信任客户端,因此您不能将数据访问 API 暴露给潜在的敌对客户端。
  2. 使用服务器上的服务封装您的存储库,并在客户端中创建一个薄委托(delegate)层来处理远程通信。
  3. 暴露实体不一定是坏习惯,只是当您开始考虑延迟加载、通过网络发送客户端不需要的数据等因素时,它就会出现问题。如果您编写一个 DTO 类,其中包装一个或多个实体并委托(delegate) get/set 调用,您实际上可以非常快速地构建 DTO 层,尤其是使用大多数 IDE 中提供的代码生成。

所有这一切的关键是一组模式实际上应该只适用于应用程序的一部分,而不是整个应用程序。事实上,您的域模型中有丰富的逻辑,并且使用存储库进行数据访问作为 DDD 的一部分,这一事实不应以任何方式影响客户端。从概念上讲,我构建的 RIA 具有三层:

  1. 客户端使用 MVC、MVP 或 MVVM 等来呈现 UI。模型层最终调用...

  2. 我可以称之为“集成层”。这是客户端和服务器上都存在的服务和数据对象的契约,以允许两者进行协调。通常,UI 设计驱动这一层,以便 (A) 仅将客户端需要的数据传递给它,并且 (B) 数据访问可以是粗粒度的,即“对这组数据所需的所有状态进行一个方法调用”。用户界面。

  3. 服务器使用任何它想要的东西来处理业务逻辑和数据访问。这可能是 DDD 或者更老派的东西,比如使用数据库中的存储过程和大量“ResultSet”或“DataTable”对象构建的数据层。

真正的要点是,客户端和服务器都是非常不同的动物,它们需要独立变化。为了做到这一点,您需要一个中间层,它是 UI 的需求和服务器上的实际情况之间的公平折衷。

与 Flex + 任何东西相比,Silverlight/WPF 和 JavaFX 的一大优势是您可以在前两者中使用大量逻辑,因为应用程序的两侧都有相同的 VM。 Flex 无疑是最好的 UI 技术,但它缺少可以更有效地共享和重用代码的服务器组件。

关于apache-flex - DDD 和客户端/服务器应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/713389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com