私はEvans、Nilsson、McCarthyを読んで、ドメイン駆動型デザインの背後にある概念と推論を理解しています。しかし、私は実際のアプリケーションにこれらをまとめて入れるのは難しいと思っています。完全な例がないと、私の頭が傷ついてしまった。私は多くのフレームワークと簡単な例を見つけましたが、DDDの後に実際のビジネスアプリケーションを構築する方法を実際に示すものはこれまでにありません。ドットをDDDと接続する
例として典型的な受注管理システムを使用して、受注取り消しのケースを取る。私の設計では、オーダー番号と理由をパラメータとして受け入れるCancelOrderメソッドでOrderCancellationServiceを見ることができます。その後、以下の「手順」を実行することがあります。
- 現在のユーザーがいることを確認しOrderRepository から指定された順序番号と
- をOrderエンティティを取得注文
- をキャンセルするために必要な権限を持っていることを確認します(サービスがルールを評価するために注文の状態を問い合わせるか、または注文がルールをカプセル化するCanCancelプロパティを持っているかどうか確認する必要があります)
- Order.Cancelを呼び出すことによってOrderエンティティの状態を更新します)
- 更新を維持するすでに
- は、このすべては、トランザクション内で起こるべき、もちろん操作
の監査エントリを追加します。処理されたすべてのクレジットカードの使用を元に戻すために、データストア
私は、これがどのように「組み立てられるか」、どのようにコード例が示されるかを探しています。コードの背後にある思考プロセスは、自分ですべての点を結び付けるのに役立ちます。どうも!
なぜサービス内の変更を維持するために「ルックアップ」、トランザクション管理、呼び出しが必要なのでしょうか?それは毎回適切な使用を保証すると思われる。 – SonOfPirate
ルックアップ - 多分。トランザクション管理はドメインサービスに属しません。通常、アプリケーション層(ドメインサービスの呼び出し元)で実装されます。私たちが既存のオブジェクトを変更しているので、NHibernateのケースで明示的な呼び出しが必要ではないので、 '変更を永続化するための呼び出し'はORMまたはUnitOfWorkによって処理されます。考え方は、ドメインコードを永続性に不可欠なものにすることです。 – Dmitry
さて、OrderRepositoryとUoWを使用して、ドメインを永続性に不可欠なものにすることは可能ですが、Orderエンティティへの変更を永続させることなくアプリケーションコードがキャンセルサービスを呼び出すことはできません。私がNHibernateを使用していないことは今まで重要視されていなかったので、ORMに基づく仮定は有効ではありません。 – SonOfPirate