我应该掌握什么对象?

时间:2016-10-13 10:09:41

标签: php command hexagonal-architecture clean-architecture

我按照六边形架构编写系统。

我在UseCase中分割了异步命令和同步查询对象。

我的src文件夹如下:

-src
--Entity
---Task.php
--UseCase
---Command
----CreateTask
-----CreateTaskUseCase.php
-----CreateTaskCommand.php

我的问题是:我可以/应该使用什么来通过UseCase\Command\CreateTask\CreateTaskCommand

的构造函数中的Command发送数据
  • \Entity\Task
  • 创建具有所有必需数据的UseCase\Command\CreateTask\Request\Task
  • only string / int / float

这是显示问题的简单示例。

现在我正在使用Domain(Entiti\Task等)中的对象 在实际情况中,我需要UseCase\Command\CreateProcess

  • UUID
  • 实例[id,name]
  • 来源[node_id,node_name,leaf_id,leaf_name]
  • 资源[id,name,type等普通类型Person [name,lastname]]

通过关注DDD,Process是我的聚合。所有实体仅存在于构造过程(节点,叶,资源,人)。然后我不想要单独的方式来创建其他实体,因为这种方式符合我的业务逻辑。

由于这个问题,问题是:我应该选择什么?打破一些规则?

问题:

  • 从Domain内部使用Object绑定命令,将更高层绑定到核心。核心的任何变化,将链与所有层的反应
  • 创建Request\*让我有很多类,但是使用清晰的命令方式,以及更多的工作 - unitTest等。
  • 仅使用标准类型(int,string等)将使__counstruct具有20个参数。我不想要多级数组,因为不会清楚使用这个命令。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

经过一段时间和经验 - 最好的选择是使用PHP的标准数据。最终,最好为该Command创建对象(第二个选项),但这将花费时间来创建类和测试。

永远不要使用域中的东西 - 这是将来的巨大缺点。