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