(个人理解)一个java应用的分层结构(dao、service、controller...)

如题

现如今随着技术的不断发展,一个java项目的构建也变的无比的简单。那么一个完整的项目涉及到不同层,不同逻辑,如何有效的区分,不至于让我们在编写/阅读代码时跳来跳去跟无头苍蝇一样乱窜呢?以下是我个人的一些拙劣看法,有不对之处或更好的还请各位小伙伴不吝赐教,谢谢!

正文

以一个多模块的项目(类似管理系统)作为例子:

|————project项目名
     |————xxx-api
     |————xxx-business
     |————xxx-common
     |————xxx-system
     |————xxx-generator
     ...

最外层的模块分级可以大致如上图这样(xxx作为项目名标识):

 xxx-api:这个模块专门用来写和对外接口相关的类。

 xxx-business:这个模块专门用于描述**系统对外的**业务层逻辑,比如什么增删改查之类的,都在这里。

 xxx-common:这个模块写**整个项目通用的、公共的**各种实体类:如引用/自定义的的第三方工具类utils、根据业务自定义的结果封装类、错误类、枚举类、注解类等等很多。。。

 xxx-system:这个模块不用多说,所写的都是针对本身我们项目系统层面的各种逻辑:比如各种切面、各种converter转换、用户、角色、菜单等等的定义实现以及工具类啥的。。。

 xxx-generator:这个不用多说,自然是借助了mybatis的代码生成器咯。
...

经过以上模块分级后,项目启动入口一般在xxx-api这个模块,其他所有模块都跟它关联。

再说一下dao、entity、service、controller、mapper层这些

Dao层:
DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。具体到项目里新建一个dao文件夹,在其下面新建一堆与数据表映射的实体类。

entity层:

entity就是属性类,通常定义在model层里面,相当于MVC的M层,属于数据模型层。
一般得实体类对应一个数据表,其中的属性定义数据表中的字段,实体类的字段数量 >= 数据库表中需要操作的字段数量。(有时候entity和dao一样)

Mapper层:
相当于说是Dao层。它在数据层面直接对数据库进行操作,写入的是sql语句,提供接口给Service层。(当然有了mybatis后,针对基本增删改,mapper层往往只需要写一个接口即可,偶尔需要声明一个查询类什么的。)

Service层(包含Service + Serviceimpl):
Service层我们常叫它服务层,大致就是通过对Dao层数据的各种封装利用,组成一个个服务,跟controller层交互。用来作为controller层与dao层之间沟通的桥梁。这里就涉及到了数据库的事务控制(增删改查)。至于Service接口里的方法全部声明,在Serviceimpl部分具体实现。但是注意,这里不要将Service接口 跟 Mapper层接口混淆。

Controller层:
Controller层就是做一个请求转发,它接收来自客户端/外部页面传来的参数,传给Service层去做处理,然后收到Service层返回来的结果,再传给页面。

简单理解就是:Controller——>Service——>Dao(Mapper)。

额外补充一点,Config层往往写一些配置,针对以上层的都有。

最后总结整体结构

结合正文的目录结构给大家假设一下大致总体结构哈(部分单模块项目/简单项目不一定要与此相同,各抒己见,求同存异就好了):

|————project项目名
	 |————xxx-api
		  |——src
		    |——main
		       |——java
		       	  |——com.xxx
			         |————config
			         |————controller
			         |————xxxApiApplication
		       |——resource
		          |——(一些mapper.xml配置文件,以及yml配置文件)
		  |——target 
		  |——pom.xml()    
     
     |————xxx-business
          |——src
		    |——main
		       |——java
		       	  |——com.xxx
			         |————converter
                     |————mapper
                     |————service
                     |————...|——resource
		          |—— 略
		  |——target 
		  |——pom.xml()
          
     |————xxx-common
          |——src
		    |——main
		       |——java
		       	  |——com.xxx
			         |————response
                     |————errors
                     |————errors
                     |————model
                     |————utils
                     |————...|——resource
		          |—— 略
		  |——target 
		  |——pom.xml()
     |————xxx-system
          |——src
		    |——main
		       |——java
		       	  |——com.xxx
			         |————aspect(切面)
			         |————converter
                     |————mapper
                     |————service
                     |————...|——resource
		          |—— 略
		  |——target 
		  |——pom.xml()
     |————xxx-generator
          |——src
		    |——main
		       |——java
		       	  |——com.xxx
			         |————mybatis.generator
		
		    |——META-INF
		       略
		  |——target 
		  |——pom.xml()
     ...
	 |——pom.xml()

人永远无法赚到自己认知之外的金钱,社会有无数方法收回你所不该拥有的。所以,请去学习~

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值