自学内容网 自学内容网

【Java Web】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();

原文地址:https://blog.csdn.net/m0_66584716/article/details/143629400

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!