【问题标题】:J2EE design pattern - How to make an application independent of backend serviceJ2EE 设计模式 - 如何使应用程序独立于后端服务
【发布时间】:2011-04-05 07:59:27
【问题描述】:

我正在尝试开发一些 RESTful Web 服务,这些服务必须访问一些后端系统来获取数据。这些后端源可以是以下任何一种:

  1. 通过 JDBC 建立数据库

  2. ERP,通过 SOAP 进行通信

  3. 另一个 J2EE 应用程序,通过 SOAP 或 REST 进行通信。

在我的级别上,我能做的最好的事情是在我的业务层和 DAO 之间实现松散耦合?是否有一些设计模式可以帮助我?

非常感谢您的帮助!!

【问题讨论】:

    标签: design-patterns rest jakarta-ee


    【解决方案1】:

    希望这会有所帮助:

    • Layer your system:正如您在回答中提到的,始终将 bz 逻辑与数据访问逻辑分开。我建议在不同的二进制模块中实现不同的层,这将使您可以灵活地在不同的层中部署不同的层(如果您真的需要的话)。

    • Repository pattern:业务层对如何在 bz 逻辑中对某些实体执行数据访问操作有抽象定义。存储库中的方法始终使用 bz 逻辑中定义的实体作为参数(存储库始终使用 bz 语言“交谈”)。一旦在 bz 层中定义了存储库接口,您就可以在单独的层中实现它们:数据访问层。

    • Dependency injection:在应用层(GUI,应用服务器,...),在初始化逻辑(引导)中,您可以使用依赖容器来注入存储库实现(在数据中定义的那些)访问层)在您的 bz 逻辑中。有很多带有依赖注入容器的开源框架。

    通过这 3 种模式,您可以将 DA 逻辑与 bz 逻辑分开。

    请注意,这是一个非常简短的答案,我建议您花点时间阅读以下书籍:

    谢谢,

    胡安乔

    【讨论】:

    • 你好,Juanjo,你能建议如何使存储库独立于存储后端,因为并非所有存储都有事务等。保存的实现方式不同。
    【解决方案2】:

    希望我正确理解了您的问题。

    我目前正在开发一个使用 JAX-WS RESTful Web 服务来访问数据的应用程序。数据可以来自各种不同的来源(在我们的例子中是两个不同的数据库和一个 Lucene 索引)。

    我认为,在不了解您的具体情况的情况下,我只能推荐我们使用的典型方法:

    • 代码到接口,而不是实现。因此,为您想要的每个 DAO 创建一个接口,并让您的业务层引用该接口而不是实现。
    • 使用依赖注入(例如 Spring 框架)来配置和注入那些 DAO,这些 DAO 可以指向多个数据源等。这样业务层就完全不知道数据的来源。

    虽然这是一本旧书,但大部分信息都在Expert One-on-One J2EE Design and Development 中。但我会说这些是标准的 Enterprise Java 最佳实践。

    【讨论】:

    • 谢谢菲尔。我已经在研究您提供的第一个解决方案。我现在不能去春天。还有其他引入依赖注入的方法吗?
    • @zombie: Google Guice 是一个轻量级的 DI 解决方案。它基本上是一个 JAR 文件(如果将 AOP Alliance 和 JSR 330 用于依赖注入,则为三个),因此它不是侵入性的。
    • @zombie:我同意@darioo - 如果你可以集成Guice,它是一个很好的轻量级解决方案。您可以将其安装在您现有的架构中。
    猜你喜欢
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2012-09-03
    相关资源
    最近更新 更多