Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns DDD实体与服务中的方法_Design Patterns_Oop_Dns_Domain Driven Design - Fatal编程技术网

Design patterns DDD实体与服务中的方法

Design patterns DDD实体与服务中的方法,design-patterns,oop,dns,domain-driven-design,Design Patterns,Oop,Dns,Domain Driven Design,我们的团队是DDD的新手,正在尝试在我们当前的项目中实现一些概念。出现的一个问题是,是将方法放入实体对象还是服务对象中 一些团队成员认为实体应该只包含值,所有功能都应该包含在服务中。其他人认为这会使实体对象变得贫乏,他们应该拥有与实体相关的功能,而服务对象应该用于更多的交叉功能 我们想知道DDD的正式观点是什么,以及在现实生活中对人们起到了什么作用。DDD没有正式的观点,但rich Domaim模型的全部目的是避免出现错误,因此明确拒绝在域对象上放置任何行为违背了它的精神 一个学派认为域对象应该

我们的团队是DDD的新手,正在尝试在我们当前的项目中实现一些概念。出现的一个问题是,是将方法放入实体对象还是服务对象中

一些团队成员认为实体应该只包含值,所有功能都应该包含在服务中。其他人认为这会使实体对象变得贫乏,他们应该拥有与实体相关的功能,而服务对象应该用于更多的交叉功能


我们想知道DDD的正式观点是什么,以及在现实生活中对人们起到了什么作用。

DDD没有正式的观点,但rich Domaim模型的全部目的是避免出现错误,因此明确拒绝在域对象上放置任何行为违背了它的精神

一个学派认为域对象应该是POCOs/POJO,这意味着它们不应该包含作为成员的抽象服务。然而,这并不意味着他们不能拥有与这些服务交互的方法

您可以为每个域对象提供的(相关)行为越多越好。

根据,有三种基本类型的对象

  • 实体
  • 价值对象
  • 服务
应用程序的业务逻辑是在这三个对象中实现的,但我们需要谨慎地划分逻辑

服务可以对服务于实体和值对象的相关功能进行分组。显式声明服务要好得多,因为它在域中创建了一个明确的区别:它封装了一个概念。将这些功能合并到实体或值对象中会造成混乱,因为不清楚这些对象代表什么

另一方面,

服务不应替换通常属于域对象的操作。我们不应该为每个需要的操作创建服务。但是,当这样一个操作作为域中的一个重要概念脱颖而出时,应该为它创建一个服务。服务有三个特征:

  • 服务执行的操作引用了一个域概念,它自然不属于实体或值对象
  • 所执行的操作引用域中的其他对象
  • 该操作是无状态的
  • 因此,有一些明确的标准来确定方法的归属。不幸的是,DDD并不像说业务逻辑属于实体或业务逻辑属于服务那样简单。这两种说法都不正确。答案是两者的结合

    最后,不要仅仅为了避免一个贫乏的域模型而向域对象添加方法

    当我们创建一个软件应用程序时,应用程序的很大一部分与域没有直接关系,但它是基础设施的一部分或服务于软件本身。与其他应用程序相比,应用程序的域部分可能非常小,因为典型的应用程序包含大量与数据库访问、文件或网络访问、用户界面等相关的代码


    我们通常很擅长为每件事举例说明,但当谈到DDD体系结构时,每个工程师似乎都是一个理论物理主义者,并且在没有一段代码作为例子的情况下就这个主题写文章。

    我读到实体(域对象)不应该依赖于服务(我相信你在这里也是这么说的)。但是实体怎么能有一个与服务交互的方法呢?如果一个实体有一个对服务的引用,这不是一个依赖关系吗?@Hooman One可以将服务作为方法参数传递,但一般来说,我不推荐这种风格。如果我理解正确的话,DDD社区,包括Evans本人,已经越来越成为现实我认为DDD和OOD不能很好地结合。FP更适合。请参阅,例如,获取高级概述。Vimeo链接已失效。以下是YouTube上的谈话标记: