引用元は
注 - ここでは、サービスをコンストラクターに渡す場合とメソッドに引数として渡す場合の両方に、「サービスをエンティティに注入する」という用語を使用しています。
a)ハンドラーと、ドメイン操作によってもトリガーされるが、代わりにドメイン内で処理されるアクション/操作の違いは何ですか? おそらく違いは、前者 (つまり、ハンドラー、またはより正確にはそのアクション) はドメインの概念を表していないのに対し、後者はドメインの概念を表しているということでしょうか?
b)
ドメイン エンティティに何も挿入する必要はありません。
ドメイン イベントを導入する理由は、ドメイン エンティティにサービスを注入する必要がないようにするためです。しかし、エンティティにドメイン サービスDSを注入することもあまり望ましくないため、そのような場合、ハンドラー(つまり、そのアクション) をドメインの概念にすることはできませんか (つまり、エンティティにDSを注入する代わりに、ハンドラーはこのDSを呼び出します)。
c) 実際にハンドラーがDSをドメイン エンティティに挿入することも置き換えることができる場合、ハンドラーがDS自体を置き換えることができる状況もありますか?
d)
ハンドラー クラスはドメイン モデルに属しません。
ハンドラはインフラストラクチャ層に属しますか? DSを呼び出すハンドラについてはどうでしょうか。
アップデート:
a)
主な違いは、ドメイン イベント ハンドラーが事後に呼び出されることです。
しかし、操作OPによってトリガーされるアクション/操作 A (ハンドラー内ではなくドメイン内で処理するもの)は、事後 (つまり、OPが終了した後) にも発生する可能性があります。したがって、これらの主な違いについて議論することはできません。2 種類のアクションは、Aがドメインの概念を表しているのに対し、ハンドラーによって実行されるアクションはドメインの概念を表していないということです。
b) 念のために言っておきますが、私の最初の質問に対する答えは、場合によってはエンティティがDSを呼び出す代わりに、ハンドラーに適切なDSを呼び出させることができるということでしょうか?
c)
ドメイン イベントは、上記のような場合にドメイン サービスの必要性をなくすことができます
したがって、 c)に対する答えは、場合によってはハンドラーが実際にDSを置き換えることができるということですか? しかし、もしそうなら、そのような場合、ハンドラー(つまり、そのアクション) はドメインの概念であると主張できませんか?
d)
ハンドラーは、適切なインフラストラクチャ サービスまたはドメイン サービスに委任するだけなので、実際にはドメインの一部ではありません。これらは、アプリケーション サービスに似た単なる接着剤の一種です。これらは引き続きドメイン プロジェクトで宣言できますが、通常はその必要はありません。
私。
ハンドラーは、適切なインフラストラクチャ サービスまたはドメイン サービスに委任するだけなので、実際にはドメインの一部ではありません。
念のために言っておきますが、「委任先」とは、エンティティが適切なDSまたはインフラストラクチャ サービスを呼び出す代わりに、特定のサービスを呼び出すジョブをハンドラに委任することを意味していると思いますか?
Ⅱ.
これらは引き続きドメイン プロジェクトで宣言できますが、通常はその必要はありません。
c)で述べたように、場合によってはハンドラーがDS自体を置き換えることができます (つまり、ハンドラーはDSを呼び出しませんが、実際には必要な操作を自分で実行します)。そのような場合、ハンドラーはドメインの概念であり、ドメイン層に属していると主張できませんか?!
2 番目の更新:
D - Ⅱ
c) で述べたように、場合によってはハンドラーが DS 自体を置き換えることができます (つまり、ハンドラーは DS を呼び出しませんが、実際には必要な操作を自分で実行します)。そのような場合、ハンドラーはドメインの概念であり、ドメイン層に属していると主張できませんか?!
このような場合、ハンドラーには 2 つの役割があります。イベントの接続と操作の実行です。配線部分はドメインの概念ではありませんが、操作自体はドメインの概念です。
a) その場合、ハンドラーは SRP に違反していることになりますか?
b)
配線部分はドメインの概念ではありませんが、操作自体はドメインの概念です。
このような場合、ハンドラーをドメイン層に配置する必要がありますか?
2)アクション Aが値を返すと仮定すると、注入によってAを実行する方が良いかどうかをどのように判断しますか(注 - ここでは、サービスをコンストラクターに渡すか、それをメソッドへの引数)サービスS (次に A を実行する) をエンティティに変換するか、代わりにドメイン イベントを使用するか(これにより、 Sでメソッドを呼び出す)?
おそらく決定は、一部のドメインコードがさらに処理するためにAの結果を必要とするかどうかに依存しますか?