【问题标题】:using JDBC Connection from presentation tier in 2-tier and 3-tier applications在 2 层和 3 层应用程序中使用表示层的 JDBC 连接
【发布时间】:2010-11-26 10:42:22
【问题描述】:

我正在编写一个将用于不同应用程序(2 层和 3 层)的模块。 我需要连接到数据库。因此,当与 2 层应用程序一起使用时,我使该模块需要一个 java.sql.Connection 对象作为参数。那里没有问题。

我面临的问题是,在 3 层应用程序的情况下,模块将从表示层使用,因此,我不想为模块提供用于 DB 访问的 Connection 对象。

你建议我用什么来解决这个问题?

【问题讨论】:

    标签: java spring jdbc 3-tier


    【解决方案1】:

    在 Spring 中,您定义了一个应用程序上下文,它在大多数情况下只是一个 XML 文件,并且包含许多称为 bean 的应用程序对象。

    <bean id="myDbConnection" scope="prototype" class="...">
       ...
    </bean>
    
    <bean id="myPersistanceManager" class="my.application.PersistanceManager">
       <property name="connection" ref="myDbConnection" />
    </bean>
    

    myDbConnection 是在同一应用程序上下文中定义的 bean,它包含所有连接详细信息。

    然后在您的表示层中,您只需使用 applicationContext.getBean("myPersistance") 并获得一个使用所有依赖项初始化的持久性管理器的实例。您可以针对不同的部署选项使用不同的应用程序上下文。

    【讨论】:

      【解决方案2】:

      您将 Connection 传递给持久性对象的本能是好的,因为您不愿意让表示层负责获取它。

      我建议阅读 MVC 模式并研究 Spring。 Spring 成语将向您展示分层应用程序的正确方法。它也将有助于解决您的依赖问题。

      更新:

      您必须阅读有关 Spring 的更多信息。

      使用 Spring 的 web->service->persistence 接口分层的常见习语将有助于正确分层您的应用程序。

      Spring 有依赖注入来帮助你管理你的依赖。

      Spring 的框架类可帮助您获取和管理数据库连接等内容。

      我认为重写别人已经写得更好的东西对你来说毫无意义。我建议你先浏览Spring MVC Step By Step 看看你是否同意。

      如果您不想学习 Spring,我建议您至少看看他们为 DataSource 和 JDBC 连接编写的类。也许您可以通过查看他们的方式来改进您的工作方式。

      【讨论】:

      • 谢谢,我目前正在阅读 MVC 模式,但我不明白它在这种特殊情况下对我有何帮助。它似乎确实有助于在我的应用程序中分离职责并帮助解耦。但我仍然不知道如何解决我的问题。
      • @duffymo,请您说的更具体些好吗?
      • @Attilah,查看我的更新。如果您想了解 Spring,则必须在此处付出一些努力。
      猜你喜欢
      • 2013-04-19
      • 2011-03-29
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      相关资源
      最近更新 更多