结构和部署
2021/10/28大约 3 分钟
结构和部署
本示例只是针对后台管理类项目.
代码结构说明

| 包名 | 说明 |
|---|---|
| api | 应用程序的接口包,主要用于在各种远程调用中,给客户端使用的jar包依赖.一般不带任何实现,依赖第三方jar包较少. |
| dal | 应用程序数据库的访问层(data access layout),该包主要面对数据库的使用,生成数据库的脚本,POJO类. |
| core | 应用程序主体的核心实现,主要面向应用程序的service层,管理事务,提供核心逻辑,状态无关. |
| app | 针对back-sample所特有的后台类应用集成包,主要包含后台类应用的菜单及页面controller和页面 |
| website | 应用程序war包产生,专门针对各种老旧服务器,比如weblogic,was等应用服务器的集成. |
| boot | 应用程序使用springboot进行构建. |
| parent | maven的parent生成的项目,没啥特别含义. |
app子项目的原理

后台类项目分包集成
在后台系统里面,假设一个系统有100个菜单,很有可能100个菜单是分为3个服务war包提供服务的.在开发过程中,也需要对于不同的功能,不同的人员进行开发,才能短平快的完成一个应用系统.
所以,上述的逻辑也是目前所谓的"前后端分离"的前提逻辑.
本示例没有提供"前后端分离"的开发模式,但是提供了一套可以让应用进行组合的结构和方法.
app子项目,作为系统内集成的最小单元,只提供"菜单"内的所有功能,并会集成core和dal,在系统内集成的时候,在大家一起使用通用的静态资源进行构建的war中,使用maven集成app子项目,就能快速的集成app内的所有菜单功能.
上述功能的快速集成,依赖于以下前提条件
- 集成环境相互兼容.这边的集成环境指代的是,在website/boot中提供的安全机制,静态资源,spring的配置方式
- 可以剥离的app内的功能模块.在app内部,必须满足"do one thing"的设计原则,在这个原则下,形成高聚合,所有的事情在app整个包内都能被完成.
通过对app的结构和开发模式的限制,我们可以推导出如下的部署方式.
后台项目常见的部署方式
多包部署

这种多包部署的结构,在登录授权部分,可以只使用某一个app的功能,在配置菜单的时候,在菜单前配置完整的额domain,指向Nginx或者F5的地址,通过对contextPath的反向代理,实现对app服务的访问.
单包部署

使用website/boot工程,集成app工程,在配置菜单时,只配置相对路径,即可访问对应的功能.
