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

时间:2017-02-24 20:46:12

标签: c# design-patterns tree composite

假设我有一组条件要求可以在树状结构中彼此嵌套,但所有要求都需要与不同的子系统通信以确定它们是否已满足。例如,一个需求可能会检查某个库存项是否存在,一个可能检查一个对象是否有某个属性,一个可能检查一个事件系统以查看某个事件是否已被触发等。你怎么能对这个模型进行建模以便你可以遍历树作为部分整体层次结构,但也允许每个节点与它需要的子系统进行通信?

1 个答案:

答案 0 :(得分:0)

您似乎应该对聚合进行建模,然后使用依赖注入(请参阅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();
    }
}

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