6. 使用 Spring 配置三层应用程序
在此,我们将通过一个示例探讨如何使用 Spring 配置三层应用程序。此类应用程序的典型代表是 Web 应用程序。
6.1. 问题
我们希望构建一个具有以下结构的三层应用程序:
![]() |
- 通过使用接口,使这三层相互独立
- 三层的集成将由 Spring 负责
- 我们将为这三层分别创建独立的包,分别命名为 [control]、[domain] 和 [dao]。此外,[tests] 包将包含测试应用程序。
6.2. 数据访问层
DAO层将实现以下接口:
Namespace istia.st.spring3tier.dao
Public Interface IDao
' do something in the diaper [dao]
Function doSomethingInDaoLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- 编写两个类 Dao1Impl1 和 Dao1Impl2,它们实现 IDao 接口。Dao1Impl1.doSomethingInDaoLayer 方法将返回 a+b,而 Dao1Impl2.doSomethingInDaoLayer 方法将返回 a-b。
- 编写一个 NUnit 测试类来测试前两个类
6.3. 业务层
业务层将实现以下接口:
Namespace istia.st.spring3tier.domain
Public Interface IDomain
' do something in the [domain] layer
Function doSomethingInDomainLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- 编写两个类 Domain1Impl1 和 Domain1Impl2,它们实现 IDomain 接口。这些类将有一个类型为 IDao 的私有字段,该字段可通过公共属性进行初始化。 [Domain1Impl1] 类的 doSomethingInDomainLayer 方法将 a 和 b 各加 1,然后将这两个参数传递给接收到的 IDao1 对象的 doSomethingInDaoLayer 方法。[Domain1Impl2] 类的 doSomethingInDomainLayer 方法将在执行相同操作之前,将 a 和 b 各减 1。
- 编写一个 NUnit 测试类来测试前两个类
6.4. 用户界面层
用户界面层将实现以下接口:
Namespace istia.st.spring3tier.control
Public Interface IControl
' do something in the [control] layer
Function doSomethingInControlLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- 编写两个类 Control1Impl1 和 Control1Impl2,它们实现 IControl1 接口。这些类将有一个类型为 IDomain 的私有字段,该字段可通过公共属性进行初始化。 [Control1Impl1] 类的 doSomethingInControlLayer 方法将 a 和 b 各加 1,然后将这两个参数传递给接收到的 IDomain1 对象的 doSomethingInDomainLayer 方法。另一方面,[Control1Impl2] 类的 doSomethingInControlLayer 方法将在执行相同操作之前,将 a 和 b 各减 1。
- 编写一个 NUnit 测试类来测试前两个类
6.5. 与 Spring 的集成
- 编写一个 Spring 配置文件,用于确定前三个层级各自应使用哪些类
- 编写一个 NUnit 测试类,使用不同的 Spring 配置来突出应用程序的灵活性
- 编写一个独立应用程序(main 方法),向已实现的 IControl 接口的 [doSomethingInControlLayer] 方法传递两个参数,并显示该接口返回的结果。
