样式测试文章

5,040 阅读3分钟

常用开发工具包

cache:    guava
aop,jdbc: spring
cron: quartz   作业调度框架
http: okhttp,apache httpclient
log: slf4j
json:jackson,gson
poi:easyexcel
socket:netty

项目模块功能介绍

op-extension-spring-boot-starter:
op-oss-spring-boot-starter: 该模块用于实现通用的文件集成。
op-extension-spring-boot-starter:
op-security-spring-boot-starter:该模块用于通用的权限管理。
op-order-common: 订单模块需要的设计模式
--算费(虚拟资产,京东,积分(装饰器莫斯))
--支付类型,支付组
--抵扣金额 

代码风格原则

基本原则:不用重复造轮子,使用可靠的工具包

1 函数式,流式编程
常用的工具包:
-commons系列工具包:MapUtils,
-guava系列工具包
-vavr工具包(函数式工具包)
-streamex(流加强工具包)

缺点:可读性比较差

2 防御式编程:
Optional

Iterables

Object.isNull

IterUtil:集合为空的判断,commons包

MapUtils

SpringUtils:Spring的工具包

Assert:断言语句,spring和hulu包


3 设计模式封装

-模板:抽象类

-builder

-step builder

-pipeline:插件式编程,组件式编程

-门面(Facade):防止对方系统带来的"腐败",即是"防腐层",本质上是装饰器 式,领域服务层的服务本质上是不能相互调用的,通过门面模式实现服务间的灵活调用


4 代码生成细节隐藏

-starter 隐藏细节(对新手不友好)
-mapstruct
-querydsl
-lombok
-自定义注解
-converter mapper:枚举转整型,整型转list
-spi机制:通过Enablexxx注入(本质上就是自定义start,集成通用功能oss,file)


5 代码借鉴
-bytebuddy(路由):运行时动态生成java class的类库  
-netty pipeline:
-jooq dsl
-AxonFramework 国外的领域驱动框架
-Spring 

6 命名通用性
Model
Vo
Request
Response
Aware
Processor
Holder

业务编程抽象思路

场景:优惠券发放规则的制订。

1 企业用户不能够使用优惠券
2 个人用户需要查询是否存在优惠券
3 专车司机分享比例为0.8
4 优享司机分享比例为0.7
5 有绕行则进行报警

实际业务中存在很多,如果xxx,那么xxx的业务逻辑,如何对这些流式的业务逻辑进行拆分?

问题痛点:领域服务是用于解决通用性问题,实际工作都是流程式业务逻辑,该如何进行抽象?

思维:数码管显示的本质是单个二极管的亮灭控制够,能将实际业务逻辑抽象为基本功能单位的组合。

  • 可以将业务逻辑抽象为行为和行为出发的条件,具体的所有业务逻辑都可以进行以下封装。
1 灯的行为就是亮灭,触发的条件就是灯的编码
2 出入库的行为可简化为入库和出库,有效和无效

总结:所有的业务系统都能够强行转换为责任链模式

参考资料