github地址:https://github.com/wuda0112/project-structure-archetype
git clone https://github.com/wuda0112/project-common.git
然后 maven clean install
git clone https://github.com/wuda0112/project-structure-archetype.git
服务端 : com.wuda.web.rest.server.RestApplication
客户端 : com.wuda.web.rest.client.api.SystemClientTest
服务端 : com.wuda.rpc.server.DubboProvider
客户端 : com.wuda.rpc.client.DubboConsumer
服务端 : com.wuda.web.mvc.MvcApplication
浏览器输入 : http://localhost:8080/swagger-ui.html
定义了一种组织项目结构的样例。此结构要达到的目的是
rest-server,提供RESTFul服务
rest-client,以接口形式调用rest-server服务
mvc-server,MVC指由java web项目提供视图,比如jsp,freemarker
web-model,为RESTFul和mvc提供model
rpc-server,rpc服务端
rpc-client,rpc客户端
由于service层的API与实现分离,所以可以很容易的使用上dubbo,motan等RPC框架
这一层不做任何业务,只负责请求分发,然后将结果展示给终端。
参数检查也不处理,理由是:如果有两种web,比如rpc和RESTful,难道两个地方都执行大同小异的检查?当然与这种接口特定的,而且与业务逻辑无关的参数,可以分别处理。
service-api ,和名字一样,包含服务接口部分
service-impl,和名字一样,就是实现
service-model,输入输出需要的model
参数检查,保证接口的健壮性
处理产品业务逻辑
返回此业务逻辑的结果
包括项目中的基础类,而且是不包含任何业务逻辑的类,供上层使用。lang这个名称,参考了java.lang的语义。
不能包含任何产品业务逻辑,比如根据用户id查询用户名称这样的操作,这种接口很多业务都会调用,但是不管什么业务,对于这个接口来说都不需要关心。
数据访问层,可以是dao-mysql,dao-mongodb,dao-redis等等,将各种数据访问的处理细节与业务分离。
如果使用mybatis访问数据库,==使用注解的方式处理sql语句==,不要使用xml配置文件,理由是:注解的方式更直观,更易于维护,想象下spring的发展,从以前很多配置文件,到现在的基本上不用配置文件,绝大部分都是使用注解的方式,如果叫你再去使用配置文件开发spring应用,你愿意返回去吗?
编码约定,建立和业务同名的数据访问对象,比如,有个XxxService,则XxxMapper.java与之对应,不以表聚合,而是以类的职责聚合。
spring
feign
dubbo
thymeleaf
swagger2
jackson
mybatis
tomcat-jdbc
lombok
多个微服务之间,绝大部分都会有公共信息,因此这些公共信息在项目project-common中。