当前位置: 首页 > article >正文

【Java Web】MVC与分层开发

文章目录

  • MVC
  • 分层开发

MVC

MVC(Model-View-Controller)架构模式将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller),以实现清晰的责任分离。

模型(Model)

  • 负责数据逻辑和业务规则的处理。模型与数据库直接交互,负责数据的存储、检索、操作等。
  • 模型并不关心如何显示这些数据,也不关心用户的输入,它只关注数据本身。

视图(View)

  • 负责展示数据给用户,是用户看到并与之交互的部分。
  • 视图从模型获取其需要展示的数据,并且当数据发生变化时,视图会自动更新以反映最新的数据状态。
  • 视图不应该包含任何业务逻辑或数据处理代码。

控制器(Controller)

  • 作为模型和视图之间的中介,处理用户的输入,控制应用程序的流程。
  • 控制器接收用户的请求,调用模型的方法进行数据处理,然后选择合适的视图来显示结果。

在这里插入图片描述

交互流程

  1. 用户向视图发出请求。
  2. 视图将请求发送给控制器。
  3. 控制器调用模型进行业务处理。
  4. 模型处理业务流程后通知视图业务状态更新。
  5. 视图显示响应结果。同时,视图可在有数据更新请求时通知模型,模型响应状态查询等。整个流程通过方法调用和事件进行交互。

在这里插入图片描述

优缺点

MVC 优点

  • 多视图共享一个模型,大大提高代码的可重用性
  • MVC三个模块相互独立,松耦合架构
  • 控制器提高了应用程序的灵活性和可配置性
  • 有利于软件工程化管理

完美的系统架构 = 松耦合 + 高重用性 + 高扩展性

MVC 缺点

  • 原理复杂
  • 增加了系统结构和实现的复杂性
  • 视图对模型数据的低效率访问

分层开发

分层开发是一种软件架构设计模式,它将应用程序的功能划分为不同的层次或模块,每一层负责特定的任务,并且层与层之间通过定义良好的接口进行通信。

  • 视图表示层:与用户交互、展示数据
  • 业务逻辑层:控制业务流程及事务
  • 数据持久层:实现数据库操作

DAO 层 (Data Access Object)

数据持久层。主要负责与数据库进行交互,提供基础的数据访问功能。它隐藏了数据访问的具体实现细节,使得上层逻辑更加简洁和易于维护。

  • 数据访问:负责与数据库或其他持久化存储进行交互。
  • CRUD 操作:提供基本的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作。
  • 封装数据源:隐藏数据访问的具体实现细节,使得上层逻辑不受底层数据存储技术的影响。

Service 层

业务逻辑层。主要负责处理业务逻辑,包括事务管理、安全性检查、复杂的业务规则等。它通过调用 DAO 层的方法来实现对数据的操作。

  • 业务逻辑:处理应用程序的核心业务逻辑。
  • 事务管理:管理数据库事务,确保数据的一致性和完整性。
  • 调用 DAO 方法:封装对 DAO 层方法的调用,提供更高层次的抽象。
  • 安全性检查:进行权限验证等安全相关的检查。

升级示例4-1

创建 service 层

用户业务逻辑层及其实现

public interface SmbmsUserService {
    /**
     * 登录
     * @param name 用户名
     * @param pwd 密码
     * @return 用户对象
     */
    public SmbmsUser login(String name, String pwd);
}
public class SmbmsUserServiceImpl implements SmbmsUserService {
    // 实例化 SmbmsUserDao
    private SmbmsUserDao smbmsUserDao = new SmbmsUserDaoImpl();
    @Override
    public SmbmsUser login(String name, String pwd) {
        // 业务逻辑实现
        return smbmsUserDao.login(name,pwd);
    }
}

在实现类中实例化 SmbmsUserDao,通过 SmbmsUserDao 实现实际的数据库操作(用户验证)。实现了业务逻辑与数据访问逻辑的分离。

// 调用 Java 方法 登录
SmbmsUserDao smbmsUserDao = new SmbmsUserDaoImpl();
SmbmsUser smbmsUser =  smbmsUserDao.login(uname,upwd);

// 调用 登录方法
SmbmsUserService smbmsUserService = new SmbmsUserServiceImpl();
SmbmsUser smbmsUser =  smbmsUserService.login(uname,upwd);

使用 DAO 直接调用缺乏服务层的抽象,可能导致业务逻辑不够清晰,也不利于后续的扩展。使用 Service 层调用的方式更加符合分层架构的设计原则,所有的业务逻辑通过 Service 层来组织,使得代码结构更加清晰、可维护。如果有更多的业务逻辑需要加入(例如,检查密码是否符合某些规则,或者记录登录日志等),可以更容易地扩展。

服务商查询列表功能

public interface SmbmsProviderService {
    /**
     * 全查
     * @return
     */
    public List<SmbmsProvider> findAll();
}
public class SmbmsProviderServiceImpl implements SmbmsProviderService {
    // 实例化 SmbmsProviderDao
    private SmbmsProviderDao smbmsProviderDao = new SmbmsProviderDaoImpl();
    @Override
    public List<SmbmsProvider> findAll() {
        return smbmsProviderDao.findAll();
    }
}
SmbmsProviderServiceImpl smbmsProviderService = new SmbmsProviderServiceImpl();
List<SmbmsProvider> providerList = smbmsProviderService.findAll();

http://www.kler.cn/a/395634.html

相关文章:

  • 【Linux】获得同一子网下当前在线设备IP/Latency/MAC 通过nmap指定CIDR扫描当前在线设备
  • 3588 yolov8 onnx 量化转 rknn 并运行
  • 创建型设计模式与面向接口编程
  • 单片机设计电流与温度监控python上位机监控平台设计
  • 机器学习在医疗健康领域的应用
  • Python中异常处理小测验
  • Gin路由深入
  • STM32芯片EXIT外部中断的配置与原理
  • FPGA 第6讲 简单组合逻辑多路选择器
  • Datawhale模型压缩技术Task2之模型剪枝
  • 基于Java Springboot旅游信息推荐系统
  • 全面解读 USB Key:定义、使用场景、加密技术及 Java 实现
  • linux之调度管理(5)-实时调度器
  • 【计算机网络】TCP协议特点3
  • 通过地址获取LONG和LAT并且存入csv
  • ubuntu, 安装部署comfyui,记录1:
  • Nginx在Windows上和Linux上(Docker启动)分别配置基本身份认证示例
  • 计算机毕业设计Python+CNN卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
  • 千益畅行,共享旅游卡市场乱象解析与未来展望
  • Python3中str和bytes
  • STM32串口——5个串口的使用方法
  • selenium元素定位---元素点击交互异常解决方法
  • 0x00基础算法 -- 0x05 排序
  • Modern Effective C++:item 1 理解模板类型推导
  • Spring Boot 中使用 @Transactional 注解配置事务管理
  • 表的数据结构和常见操作