我正在尝试找到一种可用于在域对象之间进行通信的模式。
如果两个对象中的条件都满足,我想提交对域对象的更改。
到目前为止,这是我想出的。在示例中,域对象捕获任务的状态。 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();
}
}