【发布时间】:2018-10-01 07:01:18
【问题描述】:
我有两种方法可以在我的应用程序中保存数据:保存到数据库和保存到文件。因为我不希望客户端代码处理对象的构造,所以我创建了一个类(据我所知)是带有工厂方法的简单工厂。代码如下:
public static DataPersister createDataPersister(Boolean saveToDb, Session session, String filename) {
if (saveToDb) {
return new DatabaseDataPersister(session);
} else {
return new FileDataPersister(filename);
}
}
使用此设置,客户端代码不必处理任何构造或决定是否保存到 DB 或文件 - 它可以像这样在工厂返回的对象上调用 save() 方法:
DataPersister dataPersister = DataPersisterSimpleFactory.createDataPersister(this.savetoDb, this.session, this.filename);
dataPersister.save(this.data);
我的问题是 - 这个解决方案是否违反了 SOLID 原则?为了创建例如DatabaseDataPersister 客户端代码需要传递 filename 参数,而 DataPersister 的这个实现将不会使用它。我觉得它不适合类似于接口隔离原则的东西,但不完全是这样。
如果解决方案确实是代码异味 - 我该如何清理它?
【问题讨论】:
标签: java oop design-patterns factory solid-principles