面向对象设计:具有不同依赖关系的多态类?

Object oriented design: polymorphic classes with different dependencies?

我没有太多面向对象的编程和设计经验,所以请多多包涵。

我正在尝试创建一组多态 DataProcessor 类。 DataProcessor 有一组数据和一个处理方法。每个实现都可以以完全不同的方式处理数据。例如写入数据库、发送电子邮件、将数据发布到 API 等

我对如何正确处理所有这些不同(和未知)的依赖关系感到困惑。我可以将依赖项硬编码到每个实现中,我认为一切都应该可以正常工作,但是有更好的设计吗?

只要所有DataProcessor实现处理的是同一类型的数据,就可以使用hierarchy。

public interface DataProcessor {
    public abstract void process(DataType data);
}

public class DatabaseDataProcessor implements DataProcessor {
    private MyDAO myDao;

    @Override
    public void process(DataType data) {

    }
}

public class EmailDataProcessor implements DataProcessor {
    private EmailSender sender;

    @Override
    public void process(DataType data) {

    }
}

在实现中注入不同的依赖没有问题

更好的设计是在每个不同类型的构造函数中要求不同的依赖关系,并且只实现接口来提供通用的东西。

public interface IDataProcessor 
{
     void ProcessData(SomeType data);
}

那么您的电子邮件实现如下所示

public EmailingDataProcessor : IDataProcessor
{    
     IEmailer emailer;

     EmailingDataProcessor(IEmailer emailer)
     {
          this.emailer = emailer;
     }

     public void ProcessData(SomeType data)
     {
         //do the processing
         emailer.EmailResults();
     }
}

对具有不同依赖项的每个 class 重复。

这使得每个 class 都可以自行测试,并允许您使用依赖倒置原则来提供依赖的实现。

如果每个处理器共享一些代码(即处理相同,只是传递机制不同),那么有一个基础 class 和通用代码,并且有一个抽象方法可以传递结果。然后每个不同的 class 可以实现抽象方法以不同的方式传递结果,使用不同的依赖项并且您不会重复处理逻辑。