架构风格与协同之间设计考量

简介: 一次关于架构风格与协同之间的讨论,激发出来自己的很多思考,遂整理出来,与大家分享。讨论的主要内容有三点:1、架构风格与应用框架2、时间、成本和范围的平衡3、演进式架构的考虑关于**第一点**,在读《架构整洁之道》一书中就提到过,包的组织形式决定了架构的设计风格,如下图所示,从左至右分别是按层封装、按功能封装、接口和适配器和按组件封装。![](https://ata2-img.o

一次关于架构风格与协同之间的讨论,激发出来自己的很多思考,遂整理出来,与大家分享。

讨论的主要内容有三点:

1、架构风格与应用框架
2、时间、成本和范围的平衡
3、演进式架构的考虑

关于第一点,在读《架构整洁之道》一书中就提到过,包的组织形式决定了架构的设计风格,如下图所示,从左至右分别是按层封装、按功能封装、接口和适配器和按组件封装。

这里衍生的另一个问题,就是框架的使用问题。

其实,无论是哪种架构风格,尤其记住一点,请不要嫁给框架。我们可以使用框架,但要时刻警惕,别被它拖住。另外,不要让框架污染我们的核心代码,应该依据依赖关系原则,将它们当作核心代码的插件来管理。以 Spring 为例,千万别在业务对象里到处写 @Autowired 注释。业务对象应该对 Spring 完全不知情才对。—— 摘自《架构整洁之道》

所以关于第一点,我认为架构风格是由个人的工作经历所决定的,不应该定义唯一的执行标准,在协同过程里应采用实践标准来因地制宜。现代微服务的概念:微服务是一个通过多个小型服务组合来构建单个应用的架构风格,这些服务围绕业务能力而非特定的技术标准来构建。各个服务可以采用不同的编程语言、不同的数据存储技术,运行在不同的进程之中。—— 摘自《凤凰架构》

而关于框架的使用,这里包括一些工具类和组件的使用,我个人觉得,无论采用何种技术,前提是对应用技术有足够的了解,或有对应的技术专家提供支持,否则,若团队里仅一或极少人熟悉某种技术,这是不建议使用的,因为这将成为极大的隐患。

比如,我要安利某一个技术,首先我会进行技术的调研以及源码级的分析,其次是进行团队内外的布道和分享,在充分论证的情况下,我才会进行业务架构的逐步尝试,并通过灰度和A/BTest等模式验证后,最终完成某一技术在团队内的推广。

关于第二点,架构没有对与错,每个人站在不同的视角看的都皆不相同,而架构的选择,唯有在时间、成本和范围三者之间进行平衡,由此得出的架构才是当时最合适的架构设计,当然在未来某个时间点在回看,它又可能不是合适的设计。所以,任何架构设计是否合理都是有环境的。

此外,随着技术的发展,技术就会被淘汰,而这也侧面要求架构的设计,不应该是大而全的,更应该是面向更易删除的。从分布式架构的发展史来看,从SOA演进到微服务架构,就是一场大道至简的变革实证。

从上述两点,就进入关键的第三点,多人开发在架构风格不一致时如何进行协同?

也许这不是个大问题,但是想想配置、框架、中间件的技术选型各不相同,出现百家争鸣的情况,这不仅会出现重复造轮子的糟糕情况出现,还会迅速的将系统拖入焦油坑。这就不得不使人慎重对待。

其实,问题也远远没我们想的那么复杂和困难,Spring的架构设计理念提到了约定大于配置,那么,在协同开发过程中,是去中心化的,架构的演进是一个团队共同的努力,而非一二个人的成果,尤其在现在大型复杂分布式系统架构时代,能将一二个点做到极致已是优秀,否则就不会有协同问题了。所以,共同的认识是必须的。

那么,稳定性如何得到保障?其实,随着软件架构演进,构建可靠系统的观念从”追求尽量不要出错“到正视“出错是必然”的转变,才是微服务架构得以挑战并逐步取代单体架构的底气所在。—— 摘自《凤凰架构》

而且,微服务时代涌现了很多现代架构的设计的基础理论,其中康威定律就定义了系统架构由组织架构所决定,那么,在领域驱动设计已经逐步应用落地,系统架构设计在后微服务时代里,通过领域进行架构模块的拆分和职责的定位,已经是团队分工协同首要利器。

也许,这很浪费时间,但这是一种负责和谨慎的态度,尤其是对自己学习的负责和对业务的负责,其次,最后关于第三点说一点,架构永远是演进出来的,而绝非定义出来的。

我始终认为,你可以指出别人代码逻辑的对与错,但不能指责别人代码风格的好与坏,这主要是因为你不了解对方所解决问题的场景。

此外,尤记之前记得的一个故事,别人在遇到问题时,就像一个山挡在了他的面前,而此时对你可能就是一块小石头,如果你能勤勉多去助人去拾取这些小石头,最后,你可能就会站在一座大山上,而这就是架构师影响力的建设。反之,你总是将自己面前的小石头放到别人面前,最后,你可能就会处在一个洼地里,届时,就会很难有人与你合作了。

目录
相关文章
|
6月前
|
Kubernetes 开发者 Docker
构建高效微服务架构:Docker与Kubernetes的协同
在当今快速迭代和部署应用程序的背景下,微服务架构已成为企业开发的首选模式。此文章通过深入分析Docker容器化技术和Kubernetes集群管理工具,探讨了如何利用这两者协同工作以构建和维护一个高效的微服务系统。我们将剖析Docker和Kubernetes的核心原理,并展示它们如何简化部署流程、提高系统的可伸缩性和可靠性。本文旨在为开发者提供一套实践指南,帮助其在云原生时代下,构建出既灵活又强大的后端服务。
108 3
|
6月前
|
程序员 编译器 C++
【深入探究Qt内部架构】QObject、事件循环与Q_OBJECT宏的协同作用(一)
【深入探究Qt内部架构】QObject、事件循环与Q_OBJECT宏的协同作用
170 0
EMQ
|
存储 人工智能 边缘计算
云边协同架构助力智能工厂视觉 AI 缺陷检测应用构建
打破检测系统和产线自动化设备之间的信息孤岛,构建数据高速通道,为视觉AI缺陷检测算法模型提供数据支撑,实现工厂生产智慧优化。
EMQ
507 1
云边协同架构助力智能工厂视觉 AI 缺陷检测应用构建
|
9天前
|
监控
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
通过引入稀疏化和角色多样性,SMoA为大语言模型多代理系统的发展开辟了新的方向。
24 6
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
|
30天前
|
设计模式 测试技术 持续交付
架构视角下的NHibernate:设计模式与企业级应用考量
【10月更文挑战第13天】随着软件开发向更复杂、更大规模的应用转变,数据访问层的设计变得尤为重要。NHibernate作为一个成熟的对象关系映射(ORM)框架,为企业级.NET应用程序提供了强大的支持。本文旨在为有一定经验的开发者提供一个全面的指南,介绍如何在架构层面有效地使用NHibernate,并结合领域驱动设计(DDD)原则来构建既强大又易于维护的数据层。
37 2
|
6月前
|
Kubernetes 开发者 Docker
构建高效微服务架构:Docker与Kubernetes的协同应用
【5月更文挑战第30天】 在当今软件开发领域,微服务架构已成为实现系统模块化、提升可维护性及扩展性的关键策略。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理,共同构建一个既高效又可靠的后端微服务环境。我们将剖析Docker和Kubernetes的核心功能,以及它们如何相辅相成,支撑起现代化的云原生应用程序部署和管理。文章还将提供具体实践案例,帮助开发者理解将理论应用于实际开发过程中的步骤和考虑因素。
|
1月前
|
安全 数据安全/隐私保护 UED
优化用户体验:前后端分离架构下Python WebSocket实时通信的性能考量
在当今互联网技术的迅猛发展中,前后端分离架构已然成为主流趋势,它不仅提升了开发效率,也优化了用户体验。然而,在这种架构模式下,如何实现高效的实时通信,特别是利用WebSocket协议,成为了提升用户体验的关键。本文将探讨在前后端分离架构中,使用Python进行WebSocket实时通信时的性能考量,以及与传统轮询方式的比较。
65 2
|
3月前
|
前端开发 大数据 数据库
🔥大数据洪流下的决战:JSF 表格组件如何做到毫秒级响应?揭秘背后的性能魔法!💪
【8月更文挑战第31天】在 Web 应用中,表格组件常用于展示和操作数据,但在大数据量下性能会成瓶颈。本文介绍在 JavaServer Faces(JSF)中优化表格组件的方法,包括数据处理、分页及懒加载等技术。通过后端分页或懒加载按需加载数据,减少不必要的数据加载和优化数据库查询,并利用缓存机制减少数据库访问次数,从而提高表格组件的响应速度和整体性能。掌握这些最佳实践对开发高性能 JSF 应用至关重要。
70 0
|
3月前
|
存储 设计模式 运维
Angular遇上Azure Functions:探索无服务器架构下的开发实践——从在线投票系统案例深入分析前端与后端的协同工作
【8月更文挑战第31天】在现代软件开发中,无服务器架构因可扩展性和成本效益而备受青睐。本文通过构建一个在线投票应用,介绍如何结合Angular前端框架与Azure Functions后端服务,快速搭建高效、可扩展的应用系统。Angular提供响应式编程和组件化能力,适合构建动态用户界面;Azure Functions则简化了后端逻辑处理与数据存储。通过具体示例代码,详细展示了从设置Azure Functions到整合Angular前端的全过程,帮助开发者轻松上手无服务器应用开发。
29 0
|
4月前
|
安全 数据安全/隐私保护 UED
优化用户体验:前后端分离架构下Python WebSocket实时通信的性能考量
【7月更文挑战第17天】前后端分离趋势下,WebSocket成为实时通信的关键,Python有`websockets`等库支持WebSocket服务。与HTTP轮询相比,WebSocket减少延迟,提高响应。连接管理、消息传输效率、并发处理及安全性是性能考量重点。使用WebSocket能优化用户体验,尤其适合社交、游戏等实时场景。开发应考虑场景需求,充分利用WebSocket优势。
143 3