跟踪许多班级的变化

时间:2017-08-25 19:06:12

标签: c# .net

我有一个工厂类,可以指导跨多个不同工作类的工作。这些工作类中的每一个都生成文件。我正在努力跟踪这些文件,所以最后,假设一切顺利,我可以处理它们中的每一个。我试过传递一个跟踪器类的实例,但它开始看起来太耦合了。我尝试了一些事件,但遇到了一个问题,工人类实例化了自己的类。我应该只通过多个级别的类传递引用,还是有一种模式可以解决这类问题?

编辑以响应Jakub: 我正在尝试处理整个过程中生成的文件。这些文件应该添加到工厂创建的FileTracker实例中,这样最后,工厂可以在跟踪器上调用DoSomething方法。 我遇到事件的问题是我希望在工厂中定义事件处理程序,这样我就不必在类A-C中实现处理程序。特别是因为这些类实际上是接口而且可以自己有任何数量的实现。这直到ClassC,它实际上不创建文件,所以它不会引发事件。它实例化的类会提升它们,因此ClassC需要处理它们。除非当然有一些方法可以让Factory类处理它所知道的类所引发的事件,但是根据我的理解,它没有。 我能想到的唯一方法就是将trackerInstance作为参数传递给每个类。

这是一个快速的代码示例:(我正在使用C#和.NET framework 4.7)

class FactoryWorker
{
    FileTracker trackerInstance = new FileTracker();
    ClassA a = new ClassA;
    a.MakeSomeFile();
    ClassB b = new ClassB;
    b.MakeSomeOtherFile();

    ClassC c = new ClassC;
    c.RunSplits();

    trackerInstance.DoSomethingWithAllFiles();
}

class ClassA
{
    void MakeSomeFile();
}

class ClassB
{
    void MakeSomeOtherFile();
}

class ClassC
{
    void RunSplits()
    {
        DataSplitA a = new DataSplitA();
        a.MakeSetOfFiles();
        DataSplitB b = new DataSplitB();
        b.MakeAnotherSetOfFiles();
    }
}

class DataSplitA
{
    void MakeSetOfFiles();
}

class DataSplitB
{
    void MakeAnotherSetOfFiles();
}

class FileTracker
{
    List<MadeFile> AllFilesMade {get; set;}
    void DoSomethingWithAllFiles();
}

0 个答案:

没有答案