新しいグリーンフィールドプロジェクトでは、コマンドバスアプローチを使用していますが、遭遇する問題は関係をどのように処理すべきかです。DTOのコマンドバスアプローチとの関係を処理する方法
たとえば、Orderには複数のOrderLines、ShippingおよびInvoiceアドレスがあります。
私はコマンドバスのアプローチを使用しているので、オーダーを作成するために必要なすべての情報を保持しているコマンドバスにDTOを渡したいと思います。
このコマンドもリレーションシップ(CreateOrderTask、CreateOrderAddress)を保持する必要がありますか?
- Infrastructure
-- Ui
--- Web
---- CreateOrderController.php
-- ....
- Application
-- CreateOrder
--- CreateOrder.php
--- CreateOrderHandler.php
--- CreateOrderLine.php (?)
- Domain
-- Order
--- Order.php
--- OrderLine.php
--- Address.php
-- ...
だから、このようなCreateOrderクラスになります:私は多くの正解があると思いますが
// CreateOrder.php
<?php
class CreateOrder {
/** @var CreateOrderLine[] */
protected $createOrderLines;
public function __construct(array $createOrderLines)
{
$this->createOrderLines = $createOrderLines;
}
public function getCreateOrderLines()
{
return $this->createOrderLines;
}
}
、私が探している
私のディレクトリ/ファイル構造は次のようになりますベストプラクティスあなたの考えは?
Nope。他のエンティティのIDを渡して、そのメッセージの「レシーバ」にエンティティを読み取りモデルから再水和させるだけです。 – kayess
@kayessだから、私はCreateOrderユースケース、CreateOrderLineユースケース、CreateAddressユースケースなどで終わるでしょうか?コマンドが非同期に実行された場合(シーケンシャル可) –
@kayess私は私が同じ行にいるとは思わない;-)コントローラを介して私はCreateOrder DTOを作成しているコマンドバスには、このDTOにも注文行などが含まれていますか、またはコマンドバスを介して異なるコマンドによって実行されるべきですか? –