私は DDD を学んでおり、次の基本的な質問があります。
ファクトリ、豊富なドメイン モデル、リポジトリでは、(CRUD の) 作成、読み取り、更新が処理されるようですが、削除はどうでしょうか? エンティティの削除に関するいくつかのビジネス ロジックがある可能性があります。どこでそれを処理しますか? RepositoryImpl (インフラストラクチャに属する) レイヤーは、それらの不変条件をチェックすること自体を気にする必要はありません。その仕事は、基になるデータストアから特定のエンティティを削除することです。これは工場の意図とは正反対のようですが、DDD には工場を削除するための "kill" のようなものはありません。
ユーザーが削除できる Order エンティティがあるとしますが、それが「履行済み」状態になるまで削除できないため、削除を要求するクライアントrepo.delete(ent)
は例外を受け取る必要があります。同様に、クライアントが削除を要求したときに更新が行われるシナリオが存在する可能性があります (ステータスの変更またはソフト削除フラグの設定など)。
このようなシナリオはどこで処理する必要がありentity.delete()
ますか (それは理にかなっていますか?)、または削除と呼ばれるアプリケーションまたはドメイン サービスで処理します。私が心配しているのは、Repository インターフェイスに delete というメソッドがある限り、どのクライアントもサービス メソッドをバイパスして repo メソッドを直接呼び出すことができるということです。
コンテキストを追加するだけで、レイヤーをどのように構築するかはJavaパッケージを介して行われ、パッケージの可視性をツールとして使用して、レイヤー間の相互作用の破損を禁止します。