论软件架构风格(论软件架构风格论文范文)
ccwgpt 2024-10-20 04:43 36 浏览 0 评论
摘要
本人于2021年6月参加了某司的电商平台系统项目建设,该项目旨在提升用户购物体验,提供优质的售后服务,配合运营开展营销工作,提高用户转化率。该项目的主要业务功能模块包括订单、活动、售后、用户、支付等。在此项目中,我担任了系统架构设计师,主要负责系统架构设计相关工作。本文以该电商平台系统为例,论述了软件架构风格在项目中的具体应用。我们以层次架构风格为基础,将系统划分为基础设施层、业务领域层、业务应用层、接口层,使得系统层次职责分明,最大化系统重用性和可扩展性。通过事件系统架构风格降低了系统间的耦合度,提升了灵活性,构件之间通过事件进行关联,便于扩展和维护。通过规则系统架构风格,可动态改变促销活动的规则数据,提升了业务规则的灵活性和可扩展性。最终,项目顺利上线,系统运行稳定,获得领导和同事的一致好评。
正文
2021年6月,我参与了某司电商平台系统项目建设,该项目旨在提升用户购物体验,提供优质的售后服务,配合运营开展营销工作,提高用户转化率。该项目的主要业务功能模块包括订单、活动、售后、用户、支付等。订单模块主要负责订单预览、订单生成、订单查询等业务;活动模块主要面向运营人员,运营人员通过配置不同的促销活动,比如优惠券、秒杀、拼团等,增加引流方式,提高用户转化率;售后模块主要是为了统一管理退货订单,提高用户退货退款的便捷性。
在项目中我担任系统架构设计师,主要负责系统架构设计相关工作。本项目涉及众多功能模块,业务复杂度高,为了满足业务目标,保障系统质量,前期的系统架构设计至关重要。在项目设计初期,为了设计出业务通用的架构,我们意识到架构风格选择的重要性,架构风格明确了系统组织结构的基本框架,包括构件、连接件以及约束,良好的架构设计使得系统的质量属性得到充分的保障。
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义一个系统家族,即一个架构定义一个词汇表和一组约束。词汇表中包括一些构件和连接件类型,而这组约束指出了系统是如何将这些构件和连接件组合起来的。架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。事件系统架构风格是基于事件的隐式调用风格的思想,构件不直接调用一个过程,而是系统中的构件注册关心的事件,当一个事件触发时,系统自动调用在这个事件中注册的所有过程。层次型架构风格将系统划分为多个层次,每一层为上层提供服务,并作为下层的客户,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见,层次之间一般不跨层调用,层间的协议作为连接件,每一层给相邻层提供相同的接口,接口可以使用不同的实现,这为软件重用提供了强大的支持。规则系统架构风格使得业务规则配置更加灵活,可以动态地改变规则数据,增加了可扩展性。基于规则的系统包括规则集、规则解释器、规则、数据选择器及工作内存。此外还有仓库架构风格、黑板系统风格、解释器风格等等。本文重点阐述层次型架构风格、事件系统风格以及规则系统架构风格在项目中的应用。
层次型架构风格将系统抽象为多个层次,每个层次职责分明,体现了关注点分离的思想。在本项目中,涉及众多的业务子系统,各个业务子系统都要共用一些技术组件,各子系统间相互通信都需要提供相应的访问入口。因此我们选择了层次架构风格作为总体架构基础,实现清晰的层次的划分,通过良好的层次接口设计,避免了跨层交互,减少层次所需要的关注点,形成良好的高内聚低耦合特性。我们设计的第一层是基础设施层,作为系统提供的底层服务,包括系统配置管理、安全、OSS存储、消息中间件、数据访问等各方面,核心目标是为上层提供公共基础服务;第二层是业务领域层,是对底层服务的高层业务封装,提供具体的业务逻辑服务,并且对于业务应用层所通用的业务流程进行抽象,以形成对高层业务的重用;第三层是业务应用层,对业务流程进行编排,调用业务领域层提供的具体业务逻辑服务,以实现特定的业务。第四层是接口层,提供了外部实体访问本系统的入口以及通信协议。此外,我们还定义好了每层的交互协议,每层可以由不同的开发人员负责,并行开发,提高了开发效率。
事件系统架构风格以事件为核心,实现构件间的解耦。构件的交互是系统必不可缺少的,传统的直接调用会引起构件间的强耦合,这样会导致每一次轻微的变动都会影响到局部的结构甚至整体结构。以活动子系统为例,用户在参加各种活动后都会产生大量的事件,例如优惠券领取通知事件、会员等级升级事件、获取云币通知事件等等,产生这些事件后都要由不同的子系统进行处理,例如消息中心子系统发送消息给用户。如果按照传统的直接调用的方式,那么每增加一个业务模块或者业务变动,都需要我们对活动子系统的代码做出相应的修改,而通过事件机制,我们只需要将该事件发布消息到消息中间件中,各业务模块监听自己所关心的事件消息,收到事件消息后,各业务模块做出对应的事件处理即可。可见,事件系统架构风格极大地增强了系统的可扩展性、可维护性,降低了系统的耦合性,提升了灵活性。
规则系统架构风格为运营人员配置各种促销活动提供了强大的灵活性和可扩展性。运营人员配置不同的规则数据,比如使用限制规则、满减金额规则、使用人群规则等,通过动态加载这些规则数据,并解析生成对用的规则对象实现了不同的规则业务逻辑。此外由于基于规则编码,使我们的代码可复用性提高,在相同的业务流程下,不需要重新定义接口,通过动态解析规则数据即可完成相应的业务逻辑。
系统于2022年6月顺利上线,运行稳定,有力地支撑了公司业务的快速发展,获得了领导和同事的一致好评。由于项目的架构设计合理,架构风格选型适当,构件之间充分解耦,为系统带来了良好的可扩展性、可维护性。在开发过程中,由于业务需求也在不断变化,所幸设计合理,变更得以快速实现,并未对项目进度产生较大影响。
同时层次型架构风格也给设计人员和开发人员带来了挑战,越是底层次的构件,其会被高层构件大规模复用,在开发过程中,如果设计不当或代码Bug都可能导致原来已经能够顺利运行的高层功能失效。这就要求底层开发和设计人员的综合素质能力要强,既要必须严格遵守设计原则进行开发,又要编写完善的单元测试,保证代码质量。总体来讲,系统得益于架构设计合理,架构风格选型得当,保证了系统优异的质量属性。
相关推荐
- 一个基于.Net Core遵循Clean Architecture原则开源架构
-
今天给大家推荐一个遵循CleanArchitecture原则开源架构。项目简介这是基于Asp.netCore6开发的,遵循CleanArchitecture原则,可以高效、快速地构建基于Ra...
- AI写代码翻车无数次,我发现只要提前做好这3步,bug立减80%
-
写十万行全是bug之后终于找到方法了开发"提示词管理助手"新版本那会儿,我差点被bug整崩溃。刚开始两周,全靠AI改代码架构,结果十万行程序漏洞百出。本来以为AI说没问题就稳了,结果...
- OneCode低代码平台的事件驱动设计:架构解析与实践
-
引言:低代码平台的事件驱动范式在现代软件开发中,事件驱动架构(EDA)已成为构建灵活、松耦合系统的核心范式。OneCode低代码平台通过创新性的注解驱动设计,将事件驱动理念深度融入平台架构,实现了业务...
- 国内大厂AI插件评测:根据UI图生成Vue前端代码
-
在IDEA中安装大厂的AI插件,打开ruoyi增强项目:yudao-ui-admin-vue31.CodeBuddy插件登录腾讯的CodeBuddy后,大模型选择deepseek-v3,输入提示语:...
- AI+低代码技术揭秘(二):核心架构
-
本文档介绍了为VTJ低代码平台提供支持的基本架构组件,包括Engine编排层、Provider服务系统、数据模型和代码生成管道。有关UI组件库和widget系统的信息,请参阅UI...
- GitDiagram用AI把代码库变成可视化架构图
-
这是一个名为gitdiagram的开源工具,可将GitHub仓库实时转换为交互式架构图,帮助开发者快速理解代码结构。核心功能一键可视化:替换GitHubURL中的"hub...
- 30天自制操作系统:第六天:代码架构整理与中断处理
-
1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器):在设计上,cpu单独只能处理一个中断。而pic是将8个中断信号集合成一个中断...
- AI写代码越帮越忙?2025年研究揭露惊人真相
-
近年来,AI工具如雨后春笋般涌现,许多人开始幻想程序员的未来就是“对着AI说几句话”,就能轻松写出完美的代码。然而,2025年的一项最新研究却颠覆了这一期待,揭示了一个令人意外的结果。研究邀请了16位...
- 一键理解开源项目:两个自动生成GitHub代码架构图与说明书工具
-
一、GitDiagram可以一键生成github代码仓库的架构图如果想要可视化github开源项目:https://github.com/luler/reflex_ai_fast,也可以直接把域名替换...
- 5分钟掌握 c# 网络通讯架构及代码示例
-
以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:一、TCP协议(可靠连接)1.同步通信//服务器端usingSystem.Net.Sockets;usingTcpListene...
- 从复杂到优雅:用建造者和责任链重塑代码架构
-
引用设计模式是软件开发中的重要工具,它为解决常见问题提供了标准化的解决方案,提高了代码的可维护性和可扩展性,提升了开发效率,促进了团队协作,提高了软件质量,并帮助开发者更好地适应需求变化。通过学习和应...
- 低代码开发当道,我还需要学习LangChain这些框架吗?| IT杂谈
-
专注LLM深度应用,关注我不迷路前两天有位兄弟问了个问题:当然我很能理解这位朋友的担忧:期望效率最大化,时间用在刀刃上,“不要重新发明轮子”嘛。铺天盖地的AI信息轰炸与概念炒作,很容易让人浮躁与迷茫。...
- 框架设计并不是简单粗暴地写代码,而是要先弄清逻辑
-
3.框架设计3.框架设计本节我们要开发一个UI框架,底层以白鹭引擎为例。框架设计的第一步并不是直接撸代码,而是先想清楚设计思想,抽象。一个一个的UI窗口是独立的吗?不是的,...
- 大佬用 Avalonia 框架开发的 C# 代码 IDE
-
AvalonStudioAvalonStudio是一个开源的跨平台的开发编辑器(IDE),AvalonStudio的目标是成为一个功能齐全,并且可以让开发者快速使用的IDE,提高开发的生产力。A...
- 轻量级框架Lagent 仅需20行代码即可构建自己的智能代理
-
站长之家(ChinaZ.com)8月30日消息:Lagent是一个专注于基于LLM模型的代理开发的轻量级框架。它的设计旨在简化和提高这种模型下代理的开发效率。LLM模型是一种强大的工具,可以...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- 知识框架图 (52)
- ppt框架 (55)
- 框架图模板 (59)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)