Logic 概念理解
背景
Trantor 是基于元数据驱动的中后台业务应用研发态 & 交付体系,其核心之一是为了解决软件的二开问题,为此,抽象了三类资源:模型、行为、视图。其中行为部分为业务逻辑,为了方便业务逻辑的扩展 & 二开,Trantor 定义了三种资源:可编排服务、扩展点与逻辑流, 其中可编排服务为最小的业务处理单位,扩展点是为了方便业务扩展在可编排服务内埋的扩展点,逻辑流通常对应具体的业务场景,逻辑流内由一系列的可编排服务组成。
可编排服务(@Function / @FunctionImpl)
可编排服务为最小的业务处理单位,可直接对外提供服务,也可被逻辑流调用。可编排服务与 Trantor 的许多其他资源一样,可在定制开发时被替换而改变现有的业务逻辑。可编排服务可被逻辑流编排,或被视图直接调用, 可编排服务服务间不可相互调用。
扩展点(@Extension / @ExtensionImpl)
扩展点用于预留在定制开发时可快速替换的业务逻辑替换位。扩展点和可编排服务类似但有明确不同的适用场合。扩展点都是预埋的,是经过总结和设计,被我们认为会被定制而留下的精简的小段逻辑。
类似的地方是扩展点和可编排服务一样可以是一个独立的业务方法,且分为声明和实现两部分,同声明不同实现的扩展点可在定制开发时进行替换。
不同点是扩展点只能在可编排服务逻辑内部被调用,不能用于逻辑流编排,扩展点间不能互相调用,也不能直接被视图调用。
另外由于扩展点的简单逻辑特点,实现扩展点的时候更常用的方式直接在线编辑规则表达式,而不是编写代码,因此需要接入一个规则引擎。
逻辑流(@Flow / @FlowImpl)
逻辑流是可以可视化编排的自动执行的流程,被编排的内容包括一些内置节点(条件判断、循环等控制节点和访问 DataStore 等功能性节点)和上文提到的可编排服务。可对照 AWS 的 StepFunction 功能来理解。
逻辑流可实现的能力接近通过代码编写业务逻辑,是自动且非持久化的执行的。通过使用内置节点,简单的业务逻辑可完全通过逻辑流编排来实现。
逻辑流不会持久化执行状态,一次自动执行完成,具备事务能力。
逻辑流间可相互调用,可包含可编排服务,也可被视图直接调用。
动态路由(@RouteRuleMatch / @RouteRuleValue)
动态路由是为了支持 Flow/Function/Extension 同一接口有多种实现的场景,可根据入参的不同值选择不同的实现执行。路由选择由 Trantor 机制提供,用户只需在接口上定义路由规则,实现上定义规则值,表明为此规则值时调用该实现。例如:支付接口,可以动态路由到支付宝支付、微信支付、银联支付。
匿名访问(@AnonymousAccess)
默认情况下可编排服务/逻辑流对外提供服务是需要认证的,但有些特殊情况我们需要对外暴露的 Flow/Function 可以被匿名访问,这时可以使用 Trantor 提供的匿名访问机制,只需在Flow/Function 的声明上, 增加匿名注解(即: @AnonymousAccess),来声明这是一个可匿名访问的逻辑流/可编排服务。
消息(@Message)
统一声明消息是因为项目中会有很多业务消息需要被处理,而这些信息本身又有一些要被国际化,二开的诉求。所以Trantor目前把消息定义成一种资源来管理,并且统一在API层面定义。
**目前在Trantor中存在两种消息:一种是用于提示的消息,另一种用于抛出异常的消息。
例如:成功消息返回、数据校验异常、支付异常等。