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

讨论的主要内容有三点:

1、架构风格与应用框架

2、时间、成本和范围的平衡

3、演进式架构的考虑

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

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

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

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

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

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

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

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

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

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

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

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

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

最后关于第三点说一点,架构永远是演进出来的,而绝非定义出来的。我始终认为,你可以指出别人代码逻辑的对与错,但不能指责别人代码风格的好与坏,这主要是因为你不了解对方所解决问题的场景。

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

架构风格与协同之间设计考量相关推荐

  1. (转)架构风格与基于网络的软件架构设计(介绍REST)

    随着软件水平在国内的发展,中国程序员的水平也逐渐的在提高,从当年英雄式,到后来的软件作坊,现在越来越多的人开始关注软件架构设计,软件架构师培训也越来越火了,,甚至也有国人自己编著软件架构设计方面的书籍 ...

  2. 《系统架构设计》-03-软件结构体系和架构风格

    文章目录 1. 软件结构体系 1.1 抽象(Abstract) 1.1.1 抽象的应用 1.1.2 不同层次的抽象 1.2 组件(Component) 1.2.1 定义 1.2.2 切入点 1.3 组 ...

  3. 理解本真的REST架构风格

    作者: 李锟  来源: InfoQ  发布时间: 2013-11-22 18:28  阅读: 23543 次  推荐: 23   原文链接   [收藏]   引子 在移动互联网.云计算迅猛发展的今天, ...

  4. 互联网服务架构设计漫谈(一)—设计考量点总览

    互联网服务架构设计漫谈(一)--设计考量点总览 1    概述 本文着重介绍在互联网应用服务器端的架构设计中需要关注的设计考量点,提供一个总览性认知.首先我们需要知道:不同类型的应用.不同用户规模和阶 ...

  5. [架构之路-109]-《软考-系统架构设计师》-软件架构设计-2-软件架构概述:架构风格

    引言 建筑风格指建筑设计中在内容和外貌方面所反映的特征,主要在于建筑的平面布局.形态构成.艺术处理和手法运用等方面所显示的独创和完美的意境.建筑风格因受时代的政治.社会.经济.建筑材料和建筑技术等的制 ...

  6. 架构风格与基于网络的软件架构设计

    原文链接 https://blog.csdn.net/on_1y/article/details/60358117 架构风格与基于网络的软件架构设计 如今许多服务都采用了 RESTful API, 而 ...

  7. 系统架构师—软件架构设计(一)概述、构建、视图、基本架构风格

    1.软件架构概述 从需求分析到软件设计之间的过渡过程称为软件架构.只要软件架构设计好了,整个软件就不会出现坍塌性的错误,即不会崩溃. 架构设计就是需求分配,将满足需求的职责分配到组件上. 软件架构为软 ...

  8. 软件架构设计案例_透过现象看本质:常见的前端架构风格和案例

    所谓软件架构风格,是指描述某个特定应用领域中系统组织方式的惯用模式.架构风格定义一个词汇表和一组约束,词汇表中包含一些组件及连接器,约束则指出系统如何将构建和连接器组合起来.软件架构风格反映了领域中众 ...

  9. 【软件体系结构】架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding】

    [软件体系结构]架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding 博士 - 唐雕 - 博客园

最新文章

  1. SQL的连接(join)有哪些常见形式?解释一下?解释 SQL 的 left join 和 right join?
  2. 营销3.0时代的营销特征
  3. c++采集声卡输出_其实声卡不单单只有音效,更多功能看这篇就对了
  4. mybatis-Batch Executor
  5. 如何利用光衰减器测试光纤收发器的灵敏度?
  6. python中dict函数_dict()函数以及Python中的示例
  7. springcloud 创建子父项目_idea搭建springCloud----搭建父子项目(二)
  8. Windows启动管理器
  9. Solaris11创建NFS服务
  10. 服务器操作系统分两大类,服务器的操作系统分哪几类
  11. DeFi 衍生品平台 Deri Protocol 新增三家投资者
  12. 【渝粤题库】陕西师范大学163107饭店管理 作业【高起专】
  13. String intern方法
  14. c++ 求四边形面积和周长_C++几何图形面积周长计算
  15. 《操作系统——精髓与设计原理(第八版)》复习题抄录
  16. 非精确一维线搜索(Armijo-Goldstein Rule 和 Wolfe-Powell Rule)
  17. 世界需要简化第五篇:阅读本文需要有基础,仅一文教你快速应用FOC的SVPWM实现三相异步电机调速?快速学会使用著名的电机SVPWM调速控制算法——史上最简单易懂,算法经高度抽象简化,所有下标经仔细核对
  18. JAVA学习18. HTTP 编程
  19. 自动化测试软件费用,计费引擎资费自动化测试
  20. Python自动点击鼠标脚本

热门文章

  1. Unity渲染(二):Shader着色器基础入门之渲染Image图片
  2. 牟合方盖matlab,牟合方盖的简要介绍 求牟合方盖体积的方法
  3. 基于时间复杂度为O(n)的最大波谷求法
  4. 如何用GRUB引导vmlinuz和initrd.img文件
  5. 从上瘾模型,分析为什么网易云音乐年度歌单会刷屏朋友圈?
  6. VS code 无法连接服务器
  7. java枚举 tostring_Java枚举重写toString()
  8. 游承超:钢化玻璃膜生产厂家对玻璃材料要求更高(21P)
  9. 使用逻辑分析仪抓串口波特率
  10. 服务器XP系统打印机共享设置,xp打印机共享怎么设置 xp打印机共享设置方法【详细介绍】...