Java 将现有项目与外部开源JAR分离的实践/策略
我的系统通过Hibernate/JDBC连接到Oracle。我想使用抽象对其进行重构,以使其实现与Hibernate库分离。这是一个备份,有一天团队可以切换到另一个JPA实现,而无需痛苦地将核心业务逻辑更改为带有新JPA实现的适配器。这样做有什么建议Java 将现有项目与外部开源JAR分离的实践/策略,java,design-patterns,architecture,open-source,Java,Design Patterns,Architecture,Open Source,我的系统通过Hibernate/JDBC连接到Oracle。我想使用抽象对其进行重构,以使其实现与Hibernate库分离。这是一个备份,有一天团队可以切换到另一个JPA实现,而无需痛苦地将核心业务逻辑更改为带有新JPA实现的适配器。这样做有什么建议 顺便说一下,我想从大师那里得到一些建议,将现有项目与外部开源JAR分离的常见做法/策略是什么?JPA已经是一个独立的API了。如果您的团队使用JPA,那么您应该已经能够毫不费力地从hibernate切换。您应该减少依赖性。您的服务类(包含业务逻辑的
顺便说一下,我想从大师那里得到一些建议,将现有项目与外部开源JAR分离的常见做法/策略是什么?JPA已经是一个独立的API了。如果您的团队使用JPA,那么您应该已经能够毫不费力地从hibernate切换。您应该减少依赖性。您的服务类(包含业务逻辑的类)应该依赖于数据访问对象接口,而不是特定的DAO实现。大概是这样的:
public class ImAServiceBean {
private EntityDAO entityDAO;
private void someBusinessLogic(){
entityDAO.createInstance(...);
如果DAO接口是这样的:
public interface EntityDAO {
void createInstance (...);
void updateInstance(...);
现在您正在使用EntityHibernateDaoImpl之类的东西,但是如果您想将持久性框架更改为MyBatis,您可以构建EntityMyBatisDaoImpl(实现EntityDAO)并在服务类中使用该类,而不做任何更改(因为您使用的是某种依赖项注入)。如果您使用JPA、JDO或任何持久性技术,情况也是如此:您的业务逻辑只依赖于一个简单的接口,该接口可以实现,但任何持久性技术,甚至JDBC直接依赖于标准和流行的开源库都是可以的。你不应该认为这是个问题。例如,我有一个庞大的代码库,这取决于joda时间、google guava等。现在,就你的情况而言,以下是我的观点
谢谢您能展示一些最常见的设计模式(比如包装器、适配器、桥接器等)吗?您曾经将它们与外部库(平铺、轴、显示标签等)分离(如果这个问题如此笼统,那么很抱歉)。您能说得更具体一点吗?困扰你的依赖性是什么?在什么情况下?发布的答案是一个针对接口编程的示例:不要忘了DAOAPI和实现应该在单独的库中,只有这样解耦才能完成。Google-guava是一个很棒的多功能库。谢谢你让我知道这件事。正如你所证实的,直接依赖通常是可以的。然而,我们偶尔需要一个抽象。例如,目前我们使用一个缓存库,但在未来,一个新的高性能缓存库将出现。然后,松耦合起作用。