基于业务模块组件的系统架构

Author: Anders小明

以前写过一篇《基于抽象的分层结构》,这里补充一篇《基于业务模块组件的系统架构》
一些内容在《项目笔记:dao,web,模块边界以及Model分类》以及《模块的接口设计》随笔中已经提到,这里补充总结一下。

任何一个有一定规模系统,通常会把系统做一定分解降低分析设计开发的难度,模块划分是一个比较常见的方式。
而在模块的划分及其分析设计的实践中,包括了两种层次的边界。第一是交互行为层次,第二是对象层次。

首先说交互行为。
模块和模块的交互接口最为重要,通常我们认为这些接口应该通用稳定,然而如何设计每个模块对外提供的接口却是一个不易的问题。

集成的两种基本实现方式:
1. API方式。
这是常见的实践方式。即每个模块公开数量不多的接口类(但拥有较多的接口方法)以及接口参数(都是普通的VO),每个接口的设计和实现都有该模块成员维护;实践中:这些接口都独立打包,形成多(模块)对一(接口)的依赖关系,方便编译。
这样的好处是:接口边界清晰,开发编译依赖比较简单。
然而实践中极有可能出现两种状况:接口维护失控或者过严而死板(而影响开发)。接口失控是因为接口的维护太过随意,因为A模块的需要就轻易在B模块中添加一个接口(方法),导致该接口(方法)非独立性(基本上只给模块A的这个功能点使用),或者是接口的控制过严,导致或者工作效率不高,或者接口的易用性不好。
原因在于:接口是两个模块间的耦合,而发生的种种问题在于模块耦合太过紧密;同时实践中,把模块对外提供的接口,与模块需要实现的外部模块的集成混为一谈;换句话说,A模块需要集成的语义,和B模块提供接口的语义存在差距。
这样的实践优点:开发管理控制成本较低,模块编译依赖简单,模块物理边界明确。

2. Adapter方式
这种的实践可以一定程度上解决API方式面临的问题:根据指导原则——为了降低耦合只有在中间加一层;即不轻易为模块设计对外提供的接口(方法),除非是通过重构得来的;模块对外提供两种类:一个是需要外部模块实现的接口(接口设计从本模块需要出发,当然每个接口尽管是为某个功能点服务,但也要注意其在模块内通用性);另一个是其它模块要求本模块实现的接口的实现类(这块物理上独立打包,独立于模块之外)。
即:A模块拥有一些需要B模块实现的接口(A模块对B模块的要求),而B模块中也有要求A模块实现的接口,因而A有这些接口的实现类。
处于编译依赖的考虑,已有的实践是把处理接口适配的代码维护在模块外的,就是所谓的集成模块,这样编译上就形成了1(接口实现)对n(模块)的依赖关系。模块的边界在这里模糊了,当然在这之外模块的边界是很清晰的。
这种实践方式的好处在于:模块的接口就多了一层隔离降低了耦合,把接口的通用性和接口的适应性分离,又明确了模块的边界,使得接口在日后的优化和调整有了缓冲。
这样的实践和API实践的不同之处在于:接口的设计权利一分为二,需求方拥有了其应该有的权利,并且这个权利与提供方没有冲突(旧的模式不行,一旦供应方改变了接口,就立刻导致编译问题)。

两种方式的对比:
1. 采用API方式集成,代价在于维护API本身,API面对众多的客户端,其面临的设计维护成本较高,同时实施成本高;
2. 采用Adapter方式集成,由于没有维护API,缺乏可复用接口,但可以做到为每个客户端自由定制,其设计维护成本较低,实施上成本较高;

 集成的演进方式:
1. 采用事件模式。
这也是完成交互处理的模式。通常事件模式在业务行为上也可以完成和接口相互的功能,不过由于其在接口签名上无法明确提供其业务含义,建议谨慎应用。对于产品化项目,项目开始可以应用事件处理机制,在成熟时提取为更具体的接口。
 事件模式中,Event的监听类也面临着模块的边界问题。已知的成熟开源项目都在事件源中暴露的模块内部对象,方便开发者使用。
 可以说这种方式的是Adapter方式的演进;
 
2. 采用框架回调方式
工作流和页面流也负责集成不同的模块.不过因为工作流和页面流框架都维护独立的数据对象共享池,因而在这个层面上,模块间直接的交互并不存在。这种集成上的优势,演化成通过ESB等集成框架完成.
 这种方式是API方式的演进,但是把调用点以及调用方独立出来,成为框架的一部分。

现在说说对象一级的边界集成。
在保险中,benefit对象会关联一个product对象,不过product对象是是属于产品模块而非保单模块,对于保单模块只关心id而并不使用对象,但在RMS或者FMS或者UIC这样的集成环境却是需要product对象的。我们要采用代码生成的方式,在benefit对象上加一个annotation,比如Integration的annotation标识,使用AspectJ在编译上enhancement生成的class,使得benefit对象在集成环境上可以拿到product对象,这算是一个集成方面。

组件化管理
组件化管理包含两个含义:
1. 组件访问控制,依赖管理以及服务注册;
现有的访问控制的办法,只能通过代码提交时或者编译发布时检查,但我们更期望支持运行时的能力,避免外部组件访问组件未申明公开的内部结构和程序;同时维护方式应该简单方便,成本低。
目前的组件依赖管理几乎没有,尤其是基于版本的依赖;而在实践中,依赖维护管理尤其是多版本的通常花费大量的成本。
2. 组件依赖的绑定以及失效(故障)的隔离;
我们希望能够为每个组件提供一个保护区域,当其依赖的一个组件因为种种原因(软件错误的或者软件升级)失效时,系统至少应该提供一种fail-fast机制,包括如下能力:
A.故障即停(Halt on failure)——当一个组件出错时,应当立即停止下来,而不是继续执行可能不正确的操作;
B.故障曝光性质(Failure status property)——当一个组件发生故障时,系统中的其他组件应该得到通知,故障的原因必须交代清楚;
同时,我们希望该组件,如果可能它应该可以继续运行。完成这样的目标需要很多的工作,但首先依赖于系统fail-fast能力,同时在故障消除服务恢复后,系统能够提供相应的通知,并控制恢复的顺序。

已知的支撑框架:SCA和OSGi
1. SCA考虑的是异构异步环境,OSGi考虑同构同步环境;
2. OSGi规定了容器如何管理组件,组件依赖(版本)管理,组件边界保护以及组件服务依赖运行时绑定策略和权限控制;SCA对此没有涉及;
3. SCA考虑的如何暴露服务,设计时客户端如何使用服务;OSGi考虑的更加完善;

电动汽车制造执行系统(MES)软件:Siemens Opcenter EV二次开发_(2).SiemensOpcenterEV系统架构与组件 Siemens Opcenter EV的系统架构设计合理,各层次和组件的功能明确,能够有效地支持电动汽车制造的生产过程。通过详细的二次开发和集成,可以进一步提高系统的灵活性和适应性,满足不断变化的生产需求和业务流程。以上是Siemens Opcenter EV系统架构和各主要组件的详细说明。希望这些内容能够帮助您更好地理解和使用该系统。 阅读详情

相关推荐

软件架构思想和系统架构图

目录 1 软件架构体系 1.1 系统与子系统 1.2 模块、组件、服务 1.3. 软件架构体系 2 架构原则 2.1 解耦 2.2 分层 2.3 封装 3 架构的方法 3.1 业务架构 3.2 功能架构 3.3 系统架构 3.4 技术架构 3.5 数据架构 3.6 部署架构...

赵广陆 1万+

组件

参考: 1. 组件(基本组件、业务组件...) 2. 基于 SOA 的组件化业务基础平台 3. 面向服务的体系架构(SOA)和业务组件(BC)的思考 UI组件 1. UI组件可以实现拖放式编程、快速的属性处理 2. UI组件开发者应该掌握的三项主要内容是:属性、事件和方法。 3. 常见的有:表格控件、报表控件、用户界面控件等 业务组件 业务组件是一系列不可

fallenink的专栏 2288

ChatBI告别“NL2SQL依赖症”!从准确率50%到90%,3大技术路线+4个企业案例拆解核心玩法

摘要: ChatBI通过自然语言交互实现数据民主化,其核心是“语义理解+数据执行+知识沉淀”的全链路能力,而非单一的NL2SQL技术。行业采用三大技术路线提升准确率:专有知识库(提升30%)、指标标签语义层(准确率85%)、JSON中间层(多轮对话提升25%)。数据执行方案包括NL2SQL、NL2API等,需结合场景选择。企业落地需解决四大痛点:跨表查询准确率低(引入拓扑图)、模糊查询(用户干预机制)、响应慢(预计算缓存)、多轮对话(上下文池)。Spring AI Alibaba提供轻量级集成方案,助力企业

weixin_52610848的博客 1656

模块化架构

一、模块化是什么 模块化的思想不是我们创造的,而是各行各业的趋势。造一辆汽车,它的发动机、轮子、电池组等都是标准化模块化的;又比如原来造一幢房子是钢筋水泥土,现在是通过预制件。带来的好处是又快又好又省。 二、开发领域模块化 基于传统的开发方式,软件工程到一定的规模以后,系统变的越来越复杂,很多一定规模的公司,中台系统也非常庞大复杂,按传统的开发方式,来一个需求,编码开发,一段时间之后系统变的越来越臃肿。 这是一张印度的电线杆,比较形象的来形容软件工程到一定程度后系统变的越来越复杂了,很多大公

weixin_43844911的博客 6498

告别功能限制:Win11家庭版无损升级专业版全攻略

本文详细介绍了如何将Win11家庭版无损升级到专业版的全过程,包括升级前的准备、两种官方升级方案(Microsoft Store购买和使用产品密钥)以及命令行升级方法。升级后可解锁远程桌面、组策略编辑器和BitLocker加密等高级功能,适合需要更多商业功能的用户。

weixin_32822843的博客 702

一文搞定3D卷积

在讨论卷积核的时候,是不把channel维加进去的 核 = 一个可以滑动的窗口 窗口内不同位置数据之间的权值共享 3D卷积,卷积核会在3个方向上运动,那么卷积核的运动需要有三个自由度(一小块立方体,在一个大面包块内3个方向上滑动 2D卷积,卷积核只在2个方向上运动,因此只有两个自由度(一小片纸,在一大张纸内2个方向上滑动 1D卷积,卷积核只在1个方向上运动,因此只有一个自由度(一条滑窗,在一大长线上1个方向上滑动 一个卷积核运算一次 得到一个输出值 以上讨论了单个卷积核,接下来考虑多通道,一个卷积核对应一

njuptalex的博客 3万+

springboot旅游系统设计技术描述_业务系统组件化开发概述和技术架构设计

作者:人月神话,新浪博客同名简介:多年SOA规划建设,私有云PaaS平台架构设计经验,长期从事一线项目实践今天介绍下组件化开发方面的内容,在前面我讲解微服务的时候就已经谈到,实际上微服务本身就是传统的业务系统组件化开发的一个升级。懂得基础的组件化开发和技术架构设计是也是过渡到当前主流的微服务架构思想的基础。组件化开发概述在这里先介绍和说明下基于组件化开发带来的优势。首先,原有到系统级的粗粒度控制细...

weixin_39775976的博客 558

Parrot OS最新安装教程

Parrot OS和Kali Linux一样是一个基于 Debian 的免费开源 Linux 发行版,适合安全专家、开发人员、以及关心隐私的人。相较于Kali,Parrot OS属于轻量级,对于硬件的要求无需很高,目前版本已更新到6.3。通过按照本教程的方法,能够成功安装Parrot OS。

🦸💻冰草花生酱提醒您“请记得检查所有电子设备的最后登录时间哦⏰🔍” 4419

【风控安全产品系统架构设计的一些思考】

随着互联网的不断发展和普及,信息安全和风险控制成为了各行各业关注的焦点之一。在这样的背景下,风控安全产品成为了保障企业信息资产安全的重要手段之一。本文将探讨风控安全产品系统架构设计的一些关键思考和实践经验。

weixin_46641057的博客 496

Acer宏碁暗影骑士擎AN515-58原厂系统恢复指南:从ISO镜像到完整出厂设置

本文详细介绍了为Acer宏碁暗影骑士擎AN515-58游戏本恢复原厂系统的完整指南。从准备工作、数据备份到下载官方镜像、制作恢复U盘,再到BIOS设置与恢复流程,一步步教你如何将系统完整还原至出厂状态,确保所有硬件驱动、NITROSENSE控制中心等专属优化功能恢复正常,解决系统卡顿、功能异常等问题。

weixin_29271263的博客 1099

【AI智能体】Dify 搭建数据分析应用实战操作详解

Dify 搭建数据分析应用实战详解

congge 7297

解锁交互式图表开发新境界:AntV XFlow深度指南

在当今数据驱动的时代,交互式图表已成为现代Web应用不可或缺的组成部分。无论是业务流程可视化、数据关系分析,还是复杂系统架构展示,一个强大而灵活的图表组件库都能极大提升开发效率和用户体验。今天,我们将深入探讨AntV XFlow——一个专为React设计的交互式图表开发解决方案,帮助你轻松构建专业级图表应用。🎯 ## 什么是AntV XFlow? AntV XFlow是一个基于React的交

gitblog_00653的博客 906

【GlobalMapper精品教程】073:像素到点(Pixels-to-Points)从无人机图像轻松生成点云

Global Mapper v19引入的新的像素到点工具使用摄影测量原理,从重叠图像生成高密度点云、正射影像及三维模型。它使LiDAR模块成为已经功能很强大的的必备Global Mapper扩展功能。打开GlobalmapperV25.1中文版,点击【Lidar分析】→【像素到点云】,如下所示:V25之前的版本点击工具条上的【像素到点】工具:打开工具,可以【使用向导选】,或者选择【使用主窗口】,都很简单。

智慧空间实验室 1975

Python学习- 爬虫 - 爬虫系统架构设计

这个方法会阻塞当前线程,直到协程执行完毕 实现类似于 run_in_executor 的效果:您可以使用 loop.run_in_executor 方法将耗时的、阻塞的操作转移到一个线程池中执行,以避免阻塞事件循环。当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

aobulaien001的博客 2097

系统安全性评估 (SSA) 详细解析

系统安全性评估(SSA)是一种自下而上的验证过程,目的是确保系统设计中的每个功能、子系统、硬件和软件的实现,符合早期通过 FHA 和 PSSA 设定的安全性需求。它通过对已实现的系统进行系统性综合评价,检验各项设计和安装是否符合预期的安全性目标,最终支持飞机的适航认证。飞行控制系统是飞机安全性设计的核心子系统之一,负责控制飞机的姿态和方向。为了确保飞行控制系统能够在各种飞行条件下保持安全运行,SSA 被用于验证该系统的设计是否满足 FHA 中设定的安全性目标。

qq_41854911的博客 1651

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

基于SpringCloudAlibaba的业务权限系统设计

胡弦,视频号2023年度优秀创作者,互联网大厂P8技术专家,Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者,资深架构师,技术负责人,极客时间训练营讲师,四维口袋KVP最具价值技术专家,技术领域专家团成员,2021电子工业出版社年度优秀作者,获得2023电子工业出版技术成长领路人称号,荣获2024年电子工业出版社博文视点20周年荣誉专家称号。

huxian1234的专栏 959

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

指数级增长背后,滴滴出行业务系统的架构升级

滴滴成立四年,估值已超260亿美元,公司指数级发展、业务爆炸式增长。 在此背景下,滴滴出行业务系统的架构升级是怎样进行的?如何用技术手段解决业务痛点和提升研发效率?

loongshawn的博客 5096

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

供应链系统设计-如何设计一个好的采购系统(三)之采购风控组件

如何设计一个好的采购系统系列前面两篇分别和大家聊了一下采购寻源组件和对账稽核组件,并且我们组重要的是定义一个采购系统的好的定义,我们再来强调一下:1、能够根据采购业务诉求和采购策略,做到采购订单的时效、成本和订单满足率的最优。(注意,这里说的是针对采购订单,而不是单个商品明细的最优,需要考虑整体订单的维度)2、能够自动识别好的供应商,淘汰差的供应商,让供应确定性提高3、不能出现由于结算错误引起的资损或导致下游系统出现资损,因为与外部有交互,可以识别可能的采购业务风险。

niuniu_1983的博客 1480

Butterfly流程图组件库:企业级可视化架构的终极指南

Butterfly是一个基于JavaScript/React/Vue2的**企业级流程图组件库**,专注于流程布局领域,为开发者提供强大的**可视化图表**构建能力。在前100个字的介绍中,Butterfly作为**数据驱动的节点式编排组件库**,通过丰富的DEMO和灵活的定制能力,帮助开发者快速构建专业的**流程图应用**。 ## 🎯 为什么选择Butterfly? ### 开箱即用的丰富

gitblog_00338的博客 1011

Butterfly流程图组件:新手开发者的终极可视化解决方案

Butterfly是阿里巴巴开源的流程图组件库,为开发者提供简单快速的可视化流程编排工具。这个基于JavaScript/React/Vue2的专业库专注于流程布局领域,让即使没有丰富经验的开发者也能轻松创建复杂的流程图应用。 ## 为什么选择Butterfly流程图组件 Butterfly流程图组件提供了完整的可视化解决方案,支持多种自动布局算法,包括力导向布局、层次布局、树状布局等。无论是业

gitblog_00360的博客 366
上一篇: 小议领域模型(Domain Model)补充以及更新
下一篇: 基于业务模块组件的系统架构
林仪明
博客等级 码龄25年 313粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值