gpt4 book ai didi

java - 过程代码和领域驱动设计风格代码有什么区别?

转载 作者:行者123 更新时间:2023-12-02 07:38:18 25 4
gpt4 key购买 nike

我正在学习领域驱动设计(DDD)技术,但我感觉我还不太理解它。

DDD 建议将业务逻辑(不是持久性、安全性等基础设施)放在域对象、持久性存储库、用于为客户端组装域对象(演示)的聚合器、域对象之上的薄层服务以及存储库、聚合器并充当事务边界。

让我这样说:

在 DDD 中,ViewController --> SomeService --> {域对象、存储库、聚合器}

在我当前的(程序风格)方法中:ViewController --> SomeService --> DAO/Repository

此处,ViewController 与一个或多个服务通信,以使用 DAO 将数据从数据库中拉取/推送到数据库。如果任何仅对域对象的属性进行操作的业务逻辑将位于该域对象本身的方法中。最后,从服务获取的数据被聚合到 DTO 中以呈现在 View 层中。

所以对我来说,这两种方法看起来几乎相似。

有人可以解释一下我缺少什么吗?

P.S:我正在添加更多信息以更好地解释我的问题。理论上,每个人都在说 DDD 建议“逻辑应该位于领域对象中”。好的。让我们来看一个真实的场景。

在 ShoppingCart 应用程序中,一些用户下了订单。为了处理订单,我需要执行以下所有子任务:

  1. 获取每个商品的详细信息并计算总订单价格。

  2. 获取送货地址并使用某些地址验证服务对其进行验证

  3. 验证/验证信用卡详细信息

  4. 将所有订单相关信息保存到数据库中

因此,通过遵循 DDD,我将给出逻辑,

  1. Order 对象中的 Order Total 计算循环遍历其 List 对象。

  2. 在地址对象中,我将有 validate() 方法,该方法调用一些 BING 地址验证。

  3. 在 CreditCard 类中,我将使用 Authorize() 方法,该方法调用某些 CCAuthorizationService 来授权使用某些第三方服务。

  4. 使用一些存储库将所有订单内容保存到数据库中。

所有这些步骤都将通过调用 Order.process() 来触发

这是否是正确的 DDD 方法?如果是,我们的域对象直接与存储库交互,这似乎违反了关注点分离。

如果这不是正确的 DDD 方法,有人可以告诉我您如何针对上述用例进行设计吗?

最佳答案

DDD 与语言无关,它是通过专家了解领域并构建一种可以用来讨论该领域的通用语言。因此它不能直接与函数式、过程式或面向对象的编程语言进行比较,因为它们不具有可比性。

View Controller 特定于 MVC 框架,而不特定于 DDD。

在 MVC 中,用于为 View 准备数据的 DTO 将是 View 模型。

希望其中一些有所帮助。

关于java - 过程代码和领域驱动设计风格代码有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11906266/

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