ドメイン オブジェクト間の通信に使用できるパターンを見つけようとしています。
両方のオブジェクトの条件が満たされている場合、ドメイン オブジェクトへの変更をコミットしたいと考えています。
これが私がこれまでに思いついたものです。この例では、ドメイン オブジェクトがタスクの状態をキャプチャします。 DoSomeWorkはt1で呼び出され、何らかの条件が満たされた場合、完了ハンドラをラップする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();
}
}