我对面向对象编程和设计没有多少经验,所以请耐心等待。
我正在尝试创建一组多态DataProcessor类。 DataProcessor具有一组数据和一个处理方法。每个实现都可以以完全不同的方式处理数据。例如,写入数据库,发送电子邮件,将数据发布到API等等。
我对如何正确处理所有这些不同(和未知)的依赖关系感到困惑。我可以将依赖项硬编码到每个实现中,我认为一切都应该正常工作,但是有更好的设计吗?
答案 0 :(得分:0)
如果所有DataProcessor实现都处理相同类型的数据,则可以使用层次结构。
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) {
}
}
在实现
中注入不同的依赖项没有问题答案 1 :(得分:0)
更好的设计是要求每个不同类型的构造函数中的不同依赖项,并且只需实现接口以提供常见的东西。
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();
}
}
对具有不同依赖关系的每个类重复。
这使得每个类本身都可以测试,并允许您使用依赖性反转主体来提供依赖项的实现。
如果每个处理器共享一些代码(即处理是相同的,它只是不同的传递机制,那么有一个带有公共代码的基类,并且有一个抽象方法可以提供结果。然后每个不同的类可以实现抽象方法以不同的方式传递结果,使用不同的依赖关系,并且不要复制处理逻辑。