1) 程序结构规范前端
1: Facade-Stub:包含全部对外提供服务的借口定义,并对外提供java
2: Façade:实现Façade-Stub里面定义的所有借口,能够调用Service模块和Common模块nginx
3: Task:包含所有的任务实现,能够调用Service模块和Common模块git
4: Service:包含业务处理逻辑,一般来讲事务在此模块中实现,能够调用Client、Dao和Commonredis
5: Client:包含所有对其余服务的调用,经过引入Façade-Stub实现借口调用,能够调用其余服务的Façade-Stub和本服务Commonspring
6: Dao:包含全部对数据的操做,包含SQL、NoSql等,能够调用Commonsql
7: Common:一些本服务中通用的方法数据库
8: 模块命名方法: 业务名称-服务名称-模块名称 akucun-user-client后端
9: 使用子模块的方式引入到主POM中api
<modules>
<module>akucun-user-client</module>
<module>akucun-user-common</module>
<module>akucun-user-dao</module>
<module>akucun-user-facade</module>
<module>akucun-user-facade-stub</module>
<module>akucun-user-service</module>
<module>akucun-user-task</module>
</modules>
2) 技术栈规范
新业务应用所有使用:
java + mybatis + springcloud 的技术栈进行研发
老系统逐步替换成规定的技术栈
l 数据库设计规范
ID 统一叫: pid
created_time、updated_time、created_by、update_by是必需要加到表定义中的。
若是有删除动做还须要加上is_delete、delete_time、delete_by等字段 , is_delete 为NOT NULL字段 默认为0 , 1 表示删除
全部字段尽可能所有都是NOT NULL,若是业务上确实须要使用为NULL的字段,请说明。
请尽可能将数据库的默认步长设置为2方便之后扩展
频繁须要连表查询的数据,考虑是否能够进行数据冗余
3) 接口设计规范
对外接口设计时参照RESTful风格
使用HTTP Method 来标识操做:
POST: 表示新增
GET: 表示查询
DELETE: 表示删除
PUT: 表示更新
PATCH: 表示部分更新(依照之前的经验老说,不太经常使用,或者转义使用)
使用资源来标识操做的对象
http://www.a.com/api/v1/b2b/users/1
这个URL标识将 api->v1版本->b2b域下->ID为1的用户 做为操做对象
注:对于特别复杂的接口,能够不严格遵守规范设计,可是要在设计时提出
接口数据传递经过原则上经过JSON实现
全部接口的返回值必须有统一的结构,具体结构会在后面给出
接口返回的状态码须要统一分段分配
前端和后端须要共同维护状态码和报错信息的对应表
每一个服务都要提供health-check接口,用于检测其可用
4) 提测规范
开发人员根据接口文档完成研发后须要将接口(编号)提测
提测的接口集合应该至少是一个完整的流程或功能(例如对会员信息的增删改查,应该一块儿提测)
有依赖关系的接口应该先提测底层接口再提测上层接口
每一个提测接口应需给出一个调用示例(能够保存在postman上)
postman 帐号:aikucun
密码:aikucun123456
完成接口测试以后才能进行前端系统的测试(多是某个模块的接口)
5) 上线规范
测试人员在某个代码版本上完成测试后(一般完成测试能够认为是没有优先级高的BUG便可不须要修改彻底部BUG)方可上线
每一次上线都应该至少记录BUG FIX List, 新应用或者新功能列表,已有功能的修改列表三个表格
上线步骤一般能够分为:1)数据上线 2)应用服务上线 3)前端系统上线
能够对数据进行适当备份.
执行DDL
执行DML
执行缓存数据的上线
6) 数据上线规范
能够对数据进行适当备份.
执行DDL
执行DML
执行缓存数据的上线
7) 应用服务上线规范
理清须要上线服务的调用关系
执行底层服务的上线
执行上层服务的上线
线上冒烟测试
回归测试(可选)
8) 前端系统上线规范
将静态资源发布到各个前端系统中(nginx、cdn等,没有顺序限制)
线上冒烟测试
回归测试(可选)
9) springcloud项目规范
1: 输出规范
输出类: com.akucun.common.Result
分页类: com.akucun.common.Pagination
Result中的code message对应的枚举: com.akucun.common.utils.enums.CodeMsg
2: 项目发布规范说明:
git 的分支总体预览图以下。
从上图能够看到主要包含下面几个分支:
参考: http://blog.jobbole.com/109466/
3: springboot 项目运行说明:
添加启动参数: -Ddeploy.app.name=merchant-platform-facade 和 -Dhost=192.168.1.1 -Dlog.level=info -Dguid.datacenter.id=2 -Dguid.machine.id=3
说明:
deploy.app.name | 日志文件夹名称如: /home/用户/logs/merchant-platform-facade/日志文件 |
host | 服务器的ip地址 ELK用来区分那台服务器打印的日志 |
log.level | 初始日志级别 |
guid.datacenter.id | 数据中心 |
guid.machine.id | 数据中心中对应的服务器编号 |
4: 启动类继承 SpringBootServletInitializer 能够打war包
5: 待续...
12) 技术选型
当前阶段爱库存技术选择以下
缓存 | 阿里云 redis 集群 |
数据库 | RDS 的读写分离 |
API通讯 | restfulAPI 为主 |
消息队列 | rocketMQ |
文件存储 | OSS 与 fastDFS (优化抽像可切换) |
搜索引擎 | ElasticSearch |