三层架构和MVC(Model-View-Controller)确实不是讲的同一个东西,它们是两种不同的架构设计概念。
三层架构(controller service dao):
- 三层架构是一种常见的软件架构设计模式,将一个软件系统划分为三个逻辑层:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。
- 表示层负责与用户交互,即用户界面的展示和用户输入的处理;业务逻辑层负责处理应用程序的业务逻辑;数据访问层负责与数据存储进行交互,进行数据的读取和写入操作。
- 这种架构有助于降低各层之间的耦合度,提高系统的可维护性和扩展性,并且更容易实现逻辑的复用和测试。
MVC(Model-View-Controller):
- MVC是一种用于构建用户界面的软件架构模式,将用户界面分为三个部分:模型(Model)、视图(View)和控制器(Controller)。
- 模型表示应用程序的数据和业务逻辑,视图负责用户界面的展示,控制器负责接收用户输入并调度对应的业务逻辑来进行处理。
- 这种架构模式将用户界面和业务逻辑进行有效地分离,提高了代码的组织结构和可维护性。
虽然三层架构和MVC是两种不同的概念,但它们通常可以结合使用。在一个基于MVC的Web应用中,通常会将业务逻辑和数据访问层的功能封装到服务层(Service)和数据访问对象(DAO)中,以实现更好的代码组织和复用。因此,虽然它们不是同一个概念,但在实际应用中经常会同时使用三层架构和MVC来构建完整的应用程序。
以下是一个更充分体现 MVC 的 Spring MVC 示例:
1、首先,创建一个简单的数据模型类 User
:
public class User {
private Long id;
private String username;
private String email;
// 省略构造方法和getter/setter方法
}
2、创建一个服务类 UserService
,用于处理用户相关的业务逻辑:
import org.springframework.stereotype.Service;
@Service
public class UserService {
public User getUserById(Long userId) {
// 模拟从数据库或其他数据源获取用户信息
User user = new User();
user.setId(userId);
user.setUsername("John Doe");
user.setEmail("john.doe@example.com");
return user;
}
}
3、修改 HelloController
控制器类,增加对模型的操作:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@Autowired
private UserService userService;
@RequestMapping("/user")
public String getUser(Model model) {
Long userId = 1L;
User user = userService.getUserById(userId);
model.addAttribute("user", user);
return "user";
}
}
4、创建一个新的视图 user.jsp
,用于展示用户信息:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>User Profile</title>
</head>
<body>
<h2>User Profile</h2>
<p>User ID: ${user.id}</p>
<p>Username: ${user.username}</p>
<p>Email: ${user.email}</p>
</body>
</html>
在上面的案例中,体现了经典的 MVC(Model-View-Controller)架构设计模式:
-
Model(模型):在这个案例中,通过引入了一个数据模型类
User
和一个服务类UserService
,更充分地体现了 Model 的作用。 -
View(视图):在案例中,
hello.jsp
视图文件充当了视图的角色。视图负责向用户展示数据,并与用户交互。在 Spring MVC 中,视图通常是 JSP、Thymeleaf、Freemarker 等模板引擎生成的页面。 -
Controller(控制器):在案例中,
HelloController
控制器负责接收用户请求,并调用相应的业务逻辑处理。控制器负责处理用户输入,并将处理结果传递给视图进行展示。在 Spring MVC 中,控制器使用注解来标识请求映射和处理方法。
控制器通过服务类获取用户信息,并将用户模型传递给视图进行展示。这样,Model 负责处理数据逻辑,Controller 负责处理用户请求和业务流程,View 负责展示数据给用户,实现了完整的 MVC 架构。
总体来说,Spring MVC 遵循了 MVC 设计模式的基本原则,通过将应用程序分为模型、视图和控制器三个部分,实现了业务逻辑、用户界面和用户交互的分离,提高了代码的可维护性和可扩展性。