Design patterns J2EE设计模式-如何使应用程序独立于后端服务
我正在尝试开发一些RESTfulWeb服务,这些服务必须访问一些后端系统以获取数据。这些后端源可以是以下任意一种:Design patterns J2EE设计模式-如何使应用程序独立于后端服务,design-patterns,rest,jakarta-ee,Design Patterns,Rest,Jakarta Ee,我正在尝试开发一些RESTfulWeb服务,这些服务必须访问一些后端系统以获取数据。这些后端源可以是以下任意一种: 通过JDBC访问数据库 ERP,通过SOAP进行通信 另一个J2EE应用程序,通过SOAP或REST进行通信 在我的级别上,我能做什么才能在我的业务层和DAO之间实现松散耦合?有什么设计模式可以帮助我吗 非常感谢你的帮助 我希望我正确理解了你的问题 我目前正在开发一个应用程序,它使用JAX-WSRESTfulWeb服务访问数据。这些数据可以来自各种不同的来源(在我们的例子中是两个不
非常感谢你的帮助 我希望我正确理解了你的问题 我目前正在开发一个应用程序,它使用JAX-WSRESTfulWeb服务访问数据。这些数据可以来自各种不同的来源(在我们的例子中是两个不同的数据库和一个Lucene索引) 我认为,在不了解您具体情况的情况下,我只能推荐我们使用的典型方法:
- 代码到接口,而不是实现。因此,为您想要的每个DAO创建一个接口,并让您的业务层引用该接口而不是实现
- 使用依赖注入(例如Spring框架)来配置和注入那些DAO,这些DAO可以指向多个数据源等。这样,业务层就完全不知道数据来自何处
- :正如您在回答中提到的,始终将bz逻辑与数据访问逻辑分开。我建议在不同的二进制模块中实现不同的层,这将使您能够灵活地在不同的层中部署不同的层(如果您确实需要的话)
- :业务层具有如何对bz逻辑中的某些实体执行数据访问操作的抽象定义。存储库中的方法始终使用bz逻辑中定义的实体作为参数(存储库始终使用bz语言“对话”)。一旦在bz层中定义了存储库接口,就可以在单独的层中实现它们:数据访问层
- :在应用程序层(GUI、应用程序服务器等)中,在初始化逻辑(引导)中,可以使用依赖项容器将存储库实现(在数据访问层中定义的实现)注入bz逻辑。很多开源框架都有依赖注入容器
Juanjo谢谢Phill。我已经在研究您提供的第一个解决方案。到现在为止,我还不能去春天。还有其他方法引入依赖注入吗?@zombie:是一个轻量级DI解决方案。它基本上是一个JAR文件(如果将AOP Alliance和JSR 330计算为依赖项注入,则为三个),因此它不是侵入性的。@zombie:我同意@darioo-Guice是一个很好的轻量级解决方案,如果您能够集成它的话。您可以将其融入现有的体系结构中。您好,Juanjo,您能否建议如何使存储库独立于存储后端,因为并非所有存储都有事务等。Save的实现方式不同。