MVC和三层架构

本文探讨了MVC模式与三层架构的区别与联系,指出MVC仅是界面架构的一部分,而三层架构则涵盖数据访问、业务处理及界面展示。文中还讨论了在小型程序中MVC作为整体架构的应用及潜在问题。

MVC和三层架构并没有可比性
三层架构是指将程序分为数据访问、业务处理、界面三个层次,是软甲整体架构
MVC是仅仅是界面架构,也就是它其实只是三层架构的界面部分,M是指实体模型或者实体模型的一个代理,而非领域模型,C是指控制器,仅仅是做转向,不应该包含任何业务逻辑,V就是视图了。
至于那些个什么什么O,都是实体在不同层的映射。
另外值得一提的是,MVC在一些小的程序中也经常被当做软件整体架构,那个时候M往往就是实体模型了,但是这种时候,V就对M产生了直接引用,也就是界面对实体产生依赖,这是很不好的(但小程序问题不大),此时可以尝试使用MVP模式解耦。
至于业务,看你怎么定义领域模型了,一般像上传文件这种操作并不会牵扯企业的业务,那就不应该当做一个业务,但如果这个上传是在工作流或者一些特殊处理中,则有可能上升到业务。怎么做,要看具体问题。

MVC三层架构有着类似的思想,都是分层、解耦,但两者也存在明显的区别。 ### 概念侧重点 MVC是一种复合设计模式,可归于表示模式,关注于应用内部的组织交互,包含模型(处理数据逻辑)、视图(用户界面展示)控制器(处理用户输入业务逻辑)三个主要组件,基于页面来分[^1][^2]。三层架构是一种架构,可归于部署模式,更强调整体应用的分层设计功能划分,由表现层(用户界面)、业务逻辑层(处理业务逻辑)数据访问层(与数据存储交互)三个层次组成,基于业务逻辑来分[^1][^2]。 ### 关系 MVC三层架构可以相互结合使用。在实际开发中,三层架构的表现层可以使用MVC模式来进行设计。例如,表现层接收用户请求,其中的控制器接收请求后调用业务逻辑层进行处理,业务逻辑层处理完成后返回结果给控制器,控制器再将结果传递给视图进行展示。而业务逻辑层数据访问层则按照三层架构的设计进行开发,实现业务逻辑数据访问的分离。 ### 代码示例 以下是一个简单的示例,展示了MVC三层架构的结合使用。 #### 数据访问层(DAO层) ```java // 假设这是一个产品的数据访问接口 public interface ProductDao { List<Product> selectAll(); } // 实现类 public class ProductDaoImpl implements ProductDao { @Override public List<Product> selectAll() { // 这里实现具体的数据查询逻辑,例如从数据库查询 return new ArrayList<>(); } } ``` #### 业务逻辑层(Service层) ```java // 业务逻辑层接口 public interface ProductService { List<Product> selectAll(); } // 实现类 public class ProductServiceImpl implements ProductService { private ProductDao productDao = new ProductDaoImpl(); @Override public List<Product> selectAll() { return productDao.selectAll(); } } ``` #### 表现层(MVC) ```java // 控制器类 import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class ProductController { private ProductService productService = new ProductServiceImpl(); @GetMapping("/products") public String showProducts(Model model) { List<Product> products = productService.selectAll(); model.addAttribute("products", products); return "productView"; } } // 视图(假设使用JSP) <!-- productView.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Product List</title> </head> <body> <h1>Product List</h1> <ul> <c:forEach items="${products}" var="product"> <li>${product.name}</li> </c:forEach> </ul> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值