2

ドメイン オブジェクト間の通信に使用できるパターンを見つけようとしています。

両方のオブジェクトの条件が満たされている場合、ドメイン オブジェクトへの変更をコミットしたいと考えています。

これが私がこれまでに思いついたものです。この例では、ドメイン オブジェクトがタスクの状態をキャプチャします。 DoSomeWorkt1で呼び出され、何らかの条件が満たされた場合、完了ハンドラをラップするUnitOfWorkが作成されます。UnitOfWorkがt2に渡され、条件が正しければ、作業単位が完了します。

var t1 = new Task();
var t2 = new Task();

var unitOfWork = t1.DoSomeWork();
t2.DoSomeOtherWork(unitOfWork);

Assert.IsTrue(t1.WorkComplete);

public class Task
{
    public Boolean WorkComplete { get; private set; }

    public UnitOfWork DoSomeWork()
    {
        UnitOfWork result = null;
        if (/* Some condition */)
        {
            result = new UnitOfWork(() => this.WorkComplete = true);
        }
        return result;
    }

    public void DoSomeOtherWork(UnitOfWork unitOfWork)
    {
        if (/* Some condition */)
        {
            unitOfWork.Complete();
        }
    }
}

public class UnitOfWork
{
    protected Action Handler { get; private set; }

    public UnitOfWork(Action handler)
    {
        this.Handler = handler;
    }

    public void Complete()
    {
        this.Handler.Invoke();
    }
}
4

3 に答える 3

3

ドメインイベントはおそらくそれを行うでしょう。それらは集合体間のコミュニケーションを容易にします -エリック・エヴァンスは彼が青本に含まれることを望んでいた重要な要素であると説明しました

ドメイン イベントを使用すると、ドメインで何かが発生したことを説明でき、ドメインの他の部分がそれに応答できます。たとえば、OrderConfirmed はイベントである場合があり、他のコンテキスト内のプロセスで処理できます。誰かがそれを梱包しなければならないかもしれません。誰かがそれを確認する電子メールを送信しなければならないかもしれません。その後、さまざまなサブスクライバーがそのイベントに対応する責任を負います。ドメイン イベントは、起こったことにちなんで名付けられています。これらは、実行できない可能性があるドメインに対して行う要求であるコマンドとは対照的です。ドメイン イベントが発生しました

Jimmy Bogard がDDD 入門シリーズで使用法を説明

于 2013-09-19T08:48:38.377 に答える
0

Event Aggregatorパターンによるイベントを検討しましたか?

于 2013-09-19T08:43:11.760 に答える