说明
说明
back-sample作为一个后台代码模板,业务相关只包含了登录授权这块,更包含和user-app集成的方式.
- 支持spring3.2.x到目前的最新版本(5.4)
- 支持springboot1.5.x到目前的最新版本(2.5.x)
产品和项目最大的不同在于,项目是在特定环境上开发的,基本不用考虑迁移.而产品是在外部开发,要融入到目标的技术生态内.只要是产品,就需要考虑如何兼容和集成.
面对相似的功能,能不能抽象组件,抽象什么样的组件,组件怎么被集成使用,这些问题一致困扰着产品研发团队.产品研发团队内部需要处理更高层次的复用.但是更高的抽象层次意味着更高的思维空间,意味着更高层次的实现难度,这种空间和难度在项目开发中,往往会被忽略或者绕行.
根据中国的特殊国情,一般产品的销售会伴随着实施和二次开发.而产品团队和实施团队虽然是一家公司,内部却并不是一个团队.一般产品内部还要求隐藏部分的核心逻辑,而负责交付的团队,在面对复杂多变的业务需求时,希望有更多的灵活性,同时需要了解内部原理,解决更多的问题.正是因为这种软件产品交付模式的存在,同时带来的还有产品研发团队在管理软件版本的时候,出现困难.
这个几个方面的矛盾,共同促成了user-app这种集成模式.
代码结构说明

| 包名 | 说明 |
|---|---|
| api | 应用程序的接口包,主要用于在各种远程调用中,给客户端使用的jar包依赖.一般不带任何实现,依赖第三方jar包较少. |
| dal | 应用程序数据库的访问层(data access layout),该包主要面对数据库的使用,生成数据库的脚本,POJO类. |
| core | 应用程序主体的核心实现,主要面向应用程序的service层,管理事务,提供核心逻辑,状态无关. |
| app | 针对back-sample所特有的后台类应用集成包,主要包含后台类应用的菜单及页面controller和页面,详细请看<> |
| website | 应用程序war包产生,专门针对各种老旧服务器,比如weblogic,was等应用服务器的集成.如果选用website,可以删除boot |
| boot | 应用程序使用springboot进行构建.如果使用boot,可以删除website. |
| parent | maven的parent生成的项目,没啥特别含义. |
警告
为什么会同时存在传统的springMVC和springboot
那是我所在行业的特殊性决定的,当前的行业内,还广泛存在这Websphere,Weblogic,jBoss甚至是GlassFish,如果抛弃springMVC的打包方式,在Webshere和Weblogic上处理常见的jar冲突,会非常麻烦.
app子项目的原理
无论是boot项目还是website项目,都是业务逻辑的不同打包方式,内部都有相似的结构,完成相似的功能,主要完成的功能有
- 启动spring
- 提供基础的静态css,js
- 提供基本的安全机制
- 权限控制
- 组装产品
考虑到功能重用,所以才抽象app这一层的独立,主要就是为了一个后台系统中的常见功能的重用.在已知的环境上,专门构建通用的集成方式,这种常用于插件的设计模式被使用到后台系统. 在后台系统中,菜单和菜单之间的关系非常的不紧密,所以在集成的时候,只需要使用相似的集成结构就能解决重用和分开开发的问题.
website项目和boot项目中,"组装产品"的目的,就是集成各个app,只要app项目可以灵活的集成,就能满足产品内通用模块的高层次重用.被集成的app模块,必须含有清晰的定位:处理菜单页面,包含controller和页面
提示
- 通过对xx-app项目的封装,可以适当的隐藏核心逻辑,可以满足产品研发部门的需求.甚至可以对xx-app涉及到的jar包进行混淆操作,完全无法反编译,达到隐藏核心逻辑的目的.
- xx-app这种模式的变化另外带来一个好处,因为产品核心源码没有外泄,外界的交付团队无法对核心逻辑进行修改.如果涉及到产品版本升级,为升级的统一(自动化)处理,提供了可能.
- website层给源码,产品到了现场,现场派驻的技术人员,可以按照website中暴露的配置,来对产品的加载做出调整,比如新增某些功能,通过继承,实现接口的方式,修改核心逻辑的实现.这种方式同时要求产品研发部门对于核心逻辑能提供多少自定义空间提出了更高的要求.比如,是否允许注入不同实现的接口,是否允许核心逻辑增加拦截器处理.
resources文件夹说明

| 文件夹 | 说明 |
|---|---|
| common | 该文件夹为页面velocity的parse指令使用,为页面上的通用静态资源的处理不能修改 |
| config | war/jar包内的配置文件夹,存储配置文件,让jar/war包没有配置的情况下,可以正常启动 |
| i18n | 国际化文件存储,需要分app文件夹,用于处理应用中的国际化 |
| macro | velocity的marcos不能修改 可以看看静态资源的引入 |
| spring | 所有spring的明细配置文件 |
| static | 前端静态资源目录不能修改 如果需要使用CDN或者静态发布,可以把该文件夹发布到CDN或者nginx上 |
| view | 渲染页面的模板文件不能修改 一般需要使用app区分 |
