Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Domain driven design 将航线和货物分开的目的是什么_Domain Driven Design - Fatal编程技术网

Domain driven design 将航线和货物分开的目的是什么

Domain driven design 将航线和货物分开的目的是什么,domain-driven-design,Domain Driven Design,查看ddd示例应用程序,我无法理解为什么Cargo对象需要对RouteSpecification进行单独的引用 将始发地、目的地和到达地ADLINE作为货物类别的一部分,并完全跳过此RouteSpecification类别,并公开诸如更新目的地和满足要求的Intinerary RouteSpecification用于验证行程是否满足货运路线等。但我不认为货运类本身无法处理此类任务的任何原因,这种分离的意义是什么 public class Cargo implements Entity<Ca

查看ddd示例应用程序,我无法理解为什么
Cargo
对象需要对
RouteSpecification
进行单独的引用

始发地、目的地和到达地ADLINE
作为货物类别的一部分,并完全跳过此RouteSpecification类别,并公开诸如
更新目的地
满足要求的Intinerary

RouteSpecification用于验证行程是否满足货运路线等。但我不认为货运类本身无法处理此类任务的任何原因,这种分离的意义是什么

public class Cargo implements Entity<Cargo> {

  ...
  private Location origin;
  private Location destination;
  private Date arrivalDeadline;
  ...
公共类货物实体{
...
私人位置来源;
专用位置和目的地;
私人日期到达热线;
...

如果您考虑从解决方案中完全重构RouteSpecification类的后果,您会发现,
来源
目的地
到达日期
似乎在很多时候都是一起传递的。这是一个强有力的信号,表明这些值密切相关。“内聚性”是面向对象编程的一个原则,其中密切相关的概念在代码中紧密地放在一起,因此为了遵循这个原则,您可以将这三个概念放在一个类中


许多程序员都同意,在使用这些值的任何地方传递一个RouteSpecification对象都比分别传递源代码、目的代码和到达ADLINE更简单。

如果您考虑到从sol完全重构RouteSpecification类的后果注意,您会发现
起点
目的地
到达终点线
似乎在大部分时间都在一起传递。这是一个强有力的迹象,表明这些值密切相关。“内聚性”是面向对象编程的一个原则,其中密切相关的概念在代码中紧密地放在一起,因此为了遵循这个原则,您可以将这三个概念放在一个类中


许多程序员都同意,在使用这些值的任何地方传递一个RouteSpecification对象都比分别传递源代码、目的代码和到达ADLINE更简单。

在文档中走一走,列表中有一个有用的指针

为了跟上DDD的速度,最需要的帮助之一是一个正在运行的示例应用程序。从一组简单的函数和一个基于Eric Evans书中使用的cargo示例的模型开始

有鉴于此,我们可以合理地假设该设计的动机与本文第7章中的动机类似

交付规范定义了一个交付目标,该目标至少包括一个目的地和一个到达数据,但它可能更复杂

这一责任本来可以由货物对象承担,但交货规范的抽象至少有三个好处

  • 如果没有交付规范,cargo对象将负责指定交付目标的所有这些属性和关联的详细含义。这将使Cardo变得混乱,并使其更难更改

  • 这种抽象使得在解释整个模型时可以轻松而安全地隐藏细节。例如,交付规范中可能封装了其他标准,但这种细节级别的图不必公开。该图告诉读者有交付规范,而deta这方面的ils不值得考虑(事实上,以后很容易改变)

  • 该模型更具表现力。添加交付规范明确表示,货物的确切交付方式尚未确定,但必须实现交付规范中规定的目标

  • 我还没有挖掘整个项目的历史,但我猜测
    货物。origin
    RouteSpecification。origin
    实际上是不可互换的(origin是RouteSpecification的一部分,但RouteSpecification可以随时间而改变)

    货物可以在运输过程中根据客户的要求重新安排路线,在这种情况下,为货物指定新路线并请求新路线

    也可能发生货物意外走错路线的情况,这应通知适当的人员,并触发重新走错路线程序

    版本一的代码还表明货物可能被误送(这与误送不同)


    如果您仔细查看,您会发现它们以不同的方式处理错误方向;较新的版本通过替换路线规范,然后搜索匹配的路线来实现这一点。

    浏览文档,在中有一个有用的指针

    为了跟上DDD的速度,最需要的帮助之一是一个正在运行的示例应用程序。从一组简单的函数和一个基于Eric Evans书中使用的cargo示例的模型开始

    有鉴于此,我们可以合理地假设该设计的动机与本文第7章中的动机类似

    交付规范定义了一个交付目标,该目标至少包括一个目的地和一个到达数据,但它可能更复杂

    这一责任本来可以由货物对象承担,但交货规范的抽象至少有三个好处

  • 如果没有交付规范,cargo对象将负责所有这些属性的详细含义和用于指定交付目标的关联。这将使汽车变得杂乱无章
    But then why isn't origin a part of RouteSpecification?