最近有几次关于PBC的培训,部门内也在搞一些实践,PBC的全称是Packaged Business Capabilities,感觉每个人对PBC的理解都有差别,我也在思考PBC是什么?我对PBC有什么深入的思考,以及如果让我去构建BPC的时候,我会怎么做。整理一下自己对PBC的理解,希望可以抛砖引玉。
PBC是什么?咨询公司gartner对PBC定义为:Packaged business capabilities (PBCs) are software components representing a well-defined business capability, functionally recognizable as such by a business user. Technically, a PBC is a bounded collection of a data schema and a set of services, APIs, and event channels. The well-implemented PBCs are functionally complete to ensure autonomy (no critical external dependencies, no need for direct external access to its data). PBCs are meant to be used as building blocks for application product suites and custom-assembled application experiences.
从定义上我们可以看出,PBC有几个特点,能被业务用户识别,有界集合,自治,套件等。需要被业务人员理解和识别,可被组装,复用的能力模块。
PBC也是一种能力,但什么是能力呢?能力是能够顺利完成某些活动所必须具备的一组功能。通过将业务系统中的功能进行抽象和封装,形成业务能力,使之可以被其他的业务领域或应用系统所复用,从而减少重复开发,提高开发效率,促进业务协同,加速创新和数字化转型。包括:业务功能接口,业务组件接口,数据服务能力,公共工具组件,解决方案等。能力要复用,当然PBC也要复用。
有没有感觉像低代码和全代码的混合体,我们先看一下如果想要被业务人员识别或者组装,势必会涉及到低代码。想要复用组装就要往,无代码研发方向搞。
可能会有的想法是低代码解决不了复杂的业务问题,但是业务流程处理,大的业务流程包含小的业务流程,低代码能不能解决业务问题,在于流程梳理的够不够清楚。
一个完整的PBC应当包含业务模型、数据、服务、业务流程、文档等内容,具体如下:
针对 PBC 的 UI,应该做成可选的。主要是考虑 UI 的变化非常频繁,布局、颜色、流程、交互方式都会频繁发生变化,PBC 不推荐包含 UI。当然,为了保证统一的 UI 风格设计,建议 PBC 组装过程通过统一的 UI 设计工具实现风格统一。
至于流程建模、领域建模、能力建模那一套东西,使用DDD去建模,微服务去实现业务中心,然后加BFF UI,UI是可以选择的。
那么什么是BFF呢?BFF和应用服务又有什么区别呢?BFF是位于微服务之上,它的主要职责是负责微服务之间的服务协调和编排。而应用服务主要处理微服务内的服务组合和编排,它可以组合和编排领域服务。
在小型项目里,它也可以编排其它微服务的应用服务。 在设计时我们应尽可能地将可复用的服务能力往下层沉淀,在实现能力复用的同时,还可以避免跨中心的服务调用。BFF像齿轮一样,来适配前端应用与微服务之间的步调。它通过Facade服务适配不同的前端,通过服务组合和编排,组织和协调不同的微服务。BFF微服务可根据需求和流程变化,与前端应用版本协同发布,避免中台微服务为适配前端需求的变化,而频繁地修改和发布版本,从而保证微服务版本和核心领域逻辑的稳定。
说到这里会有人疑问,BFF、DDD、微服务这些东西和传统的微服务好像没有什么区别,这些好像也是PBC的核心。系统肯定都是以业务为中心建的,PBC具备:模块化、自治、可编排、可扩展、可分发、云原生、可运营、可发现8个关键特性,可以按不同成熟度仅具备或符合其中部分特性。PBC更加关注组装、编排和自治,其他的我感觉和微服务没什么区别。
这里还有一个重要的问题就是,怎么保证领域模型设计和实现不走样,这个不是PBC面临的问题,这是所有的系统都面临的问题。实现上也没啥高大上的技术,就是通过自定义注解抽取元数据去守护领域模型。当然阿里也提供了BizWorks这类工具。至于是不是PBC,还是基于DDD 微服务去做,这个工具都可以帮我们守护模型。
复用、组装、编排,都是企业级开发应该关注的事情,不管是不是PBC。我们要提供一些能力,这些能力可以复用、组装、编排、自治,并且面向用户体验快速整合业务能力,以高效响应用户需求变化,增强业务韧性。
精进自省:快是偶然,慢才是常态。苦练基本功、保持热情、保持好奇心。