简单JavaWeb项目代码结构(Entity、Dao、Util、Service、Controller)

一个有好的代码结构的项目,可以让撸代码时心情愉悦,本文汇总了几个介绍代码结构的文章,方便查看。

1 为什么要组织代码结构

  1. 好的代码结构并不仅仅是为了看上去清晰,它更像是我们对一个系统的拆解和组装。
  2. 好的代码结构可以让你在遇到代码交接这种天理不容的情况时,减少提刀砍人的可能性。
  3. 好的代码结构可以让多人协作开发更容易,而不会缠缠绵绵到天涯,再相爱相杀。
    我们经常形容一个坏的代码结构,像屎一样(确实,这里引用原文描述,很贴切)。“屎”代表着混乱,一坨,各种杂质。接手一堆烂代码的难度就像是用一坨屎来做沙画。有时候我们还会用一团毛线来形容代码,大概是这样的。在这里插入图片描述
    对的,这种感受是绝对不会错的。而我们要做的就是把这团毛线,变成像瑞士军刀一样的清晰。
    在这里插入图片描述

2 什么样算是一个好结构

  1. 好的结构应该保持单一职责。
  2. 好的结构应该是通用的。
  3. 好的结构应该是有明确定义的。
    好的体系应该就像他们一样。
    在这里插入图片描述
    该喷火的喷火,该喷水的喷水,每个人分工都很明确。

3 如何分层

根据项目中职责进行分工,分解成不同模块(Module),体现在工程结构上对应不同的包。一般包括如下几部分:DAO(Data Access Object,数据访问对象)、Service(服务)、Controller(控制器)、Util(工具)、Entity(实体)。

3.1 Entity

实体层,也就是所谓的Model(模型),也称为POJO(Plain Ordinary Java Object,简单的Java对象)层,是数据的抽象,描述了一个数据的定义,用于存放实体的类,类中定义了多个属性,并与数据库表的字段保持一致。
实体是程序运行时所传输、处理的数据集合,如:文章是一个实体,一般叫Article,包括Title,Summary,Author,Content等内容。

3.2 Dao

用来存放对数据库的操作的方法,没有逻辑,实现CRUD。DAO层的类和表一一对应的,建议DAO只做原子操作(指一个不受其他操作影响的操作任务单元)增删改查。
如:一个DAO对象ArticleDao,包含createArticle(),updateArticle(),deleteArticle()等方法,相关SQL语句可以写在各个方法中。

3.3 Util

开发的过程中会产生许多私有方法,有时候还都是重复的,把这些私有方法提取出来作为公用的方法,形成通用工具类。也就是说,工具层的类是通用的、与业务无关的,可以独立出来,可供其他项目使用,方法通常是public static,通常命名也是ArticleUtil,CommentUtil之类。
Util一般都有明确的输入和输出结果,都可以进行单元测试。
积累好自己的Util是一件很重要的事儿。

3.4 Service

Service比Util的概念大,它的重点是在于提供一个服务,与某一个业务有关,不是通用的。这个服务可能包括一系列的数据处理,也有可能会调用多个Util,或者是调用别的服务。对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事务控制。一般而言,Service都是包含有业务逻辑,很少能做单元测试。
方法通常是public,通常是通过接口去调用,一般有public的类属性,使用时需要用new。

3.5 Controller

Controller层是对客户端传来的数据做处理,传给Service层,然后把Service层产生的数据,返回给客户端。
比如,用户传了一个pageSize,但是有可能传null,这个时候你可以再进行一次转换成默认的10;然后调用Service的方法,返回结果给到前端。

4 MVC框架

MVC(Model View Controller),是模型、视图、控制器的缩写,是一种经典的软件设计框架。

4.1 经典MVC模式

经典MVC模式整体组件类型的关系和功能如图。
在这里插入图片描述
组件类型以及关系:

  1. Model(模型)是应用程序中用于处理数据逻辑的部分,即业务模型。用来表示应用程序的核心,比如:数据库记录字段,负责在数据库中存取数据。
  2. View(视图)是应用程序中处理数据显示的部分,即用户界面,通常视图是依赖模型的数据来创建的,模型发生改变视图必须同步更新。
  3. Controller(控制器)是应用程序中处理用户交互的部分。负责从视图中读取数据,控制用户的输入,并向模型发送数据。

4.2 JavaWeb项目中经常使用的MVC模式组件结构

在这里插入图片描述

Entity(POJO)作为返回值被Dao层使用。
DAO层被Service层调用。
Service层被Controller层调用。

  1. View层负责数据的显示。包括我们看得到的使用JSP和HTML实现的界面。
  2. Cotroller层负责控制数据和用户的交互。包括我们上面提到的Servlet。
  3. Model层负责对数据逻辑的处理。包括实体类POJO(封装对象数据)、业务层Service(处理数据逻辑信息)、持久层Dao(进行数据的CRUD)等组件。
    注意:在开发中一定要遵循开发规范、框架规范,通过Servlet来实现交互,通过业务层Service进行逻辑处理,通过持久层Dao来执行数据查询。不要把每个组件的顺序和功能搞混,否则使用框架也就没有意义了。

5 参考资料

分别从 MVC 模式、Servlet、JSP 编译原理带你剖析 Servlet 组件到底属于 MVC 模式的哪一层?
代码结构中Dao,Service,Controller,Util,Model是什么意思,为什么划分?
什么是 Dao、Service、Controller、Util 和 Model ?
SpringBoot框架中的Entity,DAO,Service,Controller层的关系与代码示例
springboot中entity层,Dao层,mapper层,service层和controller层的关系和作用(通俗易懂版)
初步对SSM框架中Dao层,Mapper层,service等层的理解

猜你喜欢

转载自blog.csdn.net/stony3/article/details/129678108