后端总结:
1、RPC框架有:pandora boot、HSF、acl、buc、schedulerx,sofaboot.
2、面向Rest、RPC接口的返回值和异常处理规范。(Result VS Exception)
场景:在常见的场景当中,接口的返回值比较多样性,有些直接返回DTO甚至DO,另外返回Result。
接口层的核心价值是对外,所以如果只返回DTO或DO会不可避免的面临异常和错误栈泄漏到使用方的情况,包括错误栈被序列化反序列化的消耗,因此提出了一个规范。
规范:Interface层的HTTP和RPC接口,返回值为Result,捕捉所有异常。
规范:Application层的所有接口返回值为DTO,不负责处理异常。
Command Query Event
语意 “希望”能触发的操作 各种条件的查询 已经发生过的事情
读/写 写 只读 通常是写
返回值 DTO或Boolean DTO或Collection Void
3、CQE规范:
Application Service的接口入参只能是Command、Query或Event对象,CQE对象需要能代表当前方法的语意。唯一可以的例外是单一ID查询的情况,可以省略掉一个Query对象的创建。
这个规范的好处是:提升了接口的稳定性、降低低级的重复,并且让接口入参更加语意化。
4、CQE VS DTO 区别:
CQE:CQE对象是ApplicationService的输入,是有明确的“意图”的,所以这个对象必须保证其“正确性”。
DTO:DTO对象只是数据容器,只是为了和外部交互,所以本身不包含任何逻辑,只是贫血对象。
但可能最重要的一点:因为CQE是“意图”,所以CQE对象在理论上可以有“无限”个,每个代表不同的意图;但是DTO作为模型数据容器,和模型一一对应,所以是有限的。
5、校验规则:CQE的校验应该前置,避免在ApplicationService里面做校验,可以通过JSR303/308和Spring的validation来实现。
6、判断是否业务流程的几个点:
1、不要有if/else分支逻辑、
2、不要有任何计算、
3、一些数据转换可以交给其他对象来做、
7、ApplicationService应该返回DTO还是Event,这里做出了规范。
ApplicationService应该永远返回DTO而不是Event。
观察者对象(observer)
观察者对象定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。
这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己。