松散耦合复合对象节点及其依赖项
Loosely coupling composite object nodes and their dependencies
假设我有一组条件要求,它们可以在树状结构中相互嵌套,但所有要求都需要与不同的子系统进行通信,以确定它们是否得到满足。例如,一个需求可能会检查某个库存项目是否存在,一个可能会检查一个对象的某个属性,一个可能会检查一个事件系统以查看某个事件是否已触发等。您如何对此建模以便您可以遍历树作为部分-整体层次结构,但也允许每个节点与其需要的子系统进行通信?
看来您应该对聚合进行建模,然后使用依赖项注入(请参阅 What is dependency injection?)来要求应满足所需功能的任何对象。
每个节点就像一个 domain model。
像这样:
public class A
{
// You inject some service IServiceX
public A(IServiceX serviceX)
{
ServiceX = serviceX;
}
private IServiceX ServiceX { get; }
// B is associated to A
public B B { get; set; }
// So you can do some stuff calling the whole ServiceX
public void DoStuff()
{
ServiceX.DoWhatever();
}
}
public class B
{
public B(IServiceY serviceY)
{
ServiceY = serviceY;
}
private IServiceY ServiceY { get; }
// C is associated to B
public C C { get; set; }
public void DoStuff()
{
ServiceY.DoWhatever();
}
}
public class C
{
public C(IServiceZ serviceZ)
{
IServiceZ = serviceZ;
}
private IServiceZ IServiceZ { get; }
public void DoStuff()
{
IServiceZ.DoWhatever();
}
}
显然,您可以向这些聚合中的某些聚合中注入多个服务。由于每个聚合都与另一个聚合相关联,因此您也应该能够遍历树。
假设我有一组条件要求,它们可以在树状结构中相互嵌套,但所有要求都需要与不同的子系统进行通信,以确定它们是否得到满足。例如,一个需求可能会检查某个库存项目是否存在,一个可能会检查一个对象的某个属性,一个可能会检查一个事件系统以查看某个事件是否已触发等。您如何对此建模以便您可以遍历树作为部分-整体层次结构,但也允许每个节点与其需要的子系统进行通信?
看来您应该对聚合进行建模,然后使用依赖项注入(请参阅 What is dependency injection?)来要求应满足所需功能的任何对象。
每个节点就像一个 domain model。
像这样:
public class A
{
// You inject some service IServiceX
public A(IServiceX serviceX)
{
ServiceX = serviceX;
}
private IServiceX ServiceX { get; }
// B is associated to A
public B B { get; set; }
// So you can do some stuff calling the whole ServiceX
public void DoStuff()
{
ServiceX.DoWhatever();
}
}
public class B
{
public B(IServiceY serviceY)
{
ServiceY = serviceY;
}
private IServiceY ServiceY { get; }
// C is associated to B
public C C { get; set; }
public void DoStuff()
{
ServiceY.DoWhatever();
}
}
public class C
{
public C(IServiceZ serviceZ)
{
IServiceZ = serviceZ;
}
private IServiceZ IServiceZ { get; }
public void DoStuff()
{
IServiceZ.DoWhatever();
}
}
显然,您可以向这些聚合中的某些聚合中注入多个服务。由于每个聚合都与另一个聚合相关联,因此您也应该能够遍历树。