我正在设计一个界面,用于表示某些实体的标识符集合。通过两个类似的接口,jdk为我们提供了(javadoc ommited):
javax.sql.DataSource
:
public interface DataSource extends CommonDataSource,Wrapper {
Connection getConnection() throws SQLException;
Connection getConnection(String username, String password)
throws SQLException;
}
和javax.activation.DataSource
:
public interface DataSource {
public InputStream getInputStream() throws IOException;
public OutputStream getOutputStream() throws IOException;
public String getContentType();
public String getName();
}
我决定写这样的东西:
public interface FilterDataSource{
public List<Integer> getIdentifiers();
}
界面(我称之为FilterDataSource
,其中Filter
是一个实体)可能至少有两个不同的实现SqlFilterDataSource
和WebApplicationGlobalCacheFilterDataSource
(它们将在IoC
容器)。
我的问题是关于界面。在这种情况下使用DataSource
概念是否正确,如果是这样,我应该如何重新设计它(如果需要)。
答案 0 :(得分:1)
根据您提供的信息,我认为您尝试设计的内容更类似于DAO
(数据访问对象,请参阅this wikipedia page)或JPA的{{ 1}}而不是EntityManager
。主要区别在于DataSource
完全从它提供的数据类型中提取(它可以很好地提供许多不同类型的数据,如数据库连接可以做到的),而其他的则没有(或更好,较小的程度,尤其是DataSource
)。如果您需要抽象对某个实体的标识符列表的访问,您不希望(至少我认为如此)从实体本身进行抽象,因此EntityManager
不是您可以应用的最佳概念你的设计。