松散耦合复合对象节点及其依赖项

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();
    }
}

显然,您可以向这些聚合中的某些聚合中注入多个服务。由于每个聚合都与另一个聚合相关联,因此您也应该能够遍历树。