看着看着就想着应该把一些好的建议和好的提问记下来,日常开发中实时提问。然后还有很多想法,比如总结一个项目体检表出来,对着检查项发现问题。
enmm……我是不是有点上瘾?!
软件项目中的架构设计是想要解决一个问题:让普通程序员也能参与其中,一起实现复杂系统,而不必依赖于很多精英。
架构设计,就是通过组织人员和技术,低成本满足需求以及需求的变化,保障软件稳定高效运行。
复杂的软件项目通常有两个特点:
技术的复杂性主要体现在四个方面:
因为技术的复杂性,会导致软件开发变得很复杂,开发成本高。而架构设计恰恰可以在这些方面很好地解决技术复杂的问题。
主要从四个方面来:
架构设计的目标,使用最小的人力成本来满足需求开发和响应需求的变化,用最小的运行成本来保障软件的运行。
架构设计的方法都是基于工程领域分而治之的策略,本质上就是将系统分拆,将人员分拆。但是光拆还不够,拆完了还能拼回来,所以咬清楚架构设计的“道”。
架构设计的道,就是组织人员和技术把系统和团队拆分,并安排好切分后的排列关系,让拆分后的部分能通过约定好的协议互相通信,共同实现最终的结果。
架构设计要做好,确实不是一个容易的事,需要大量的经验积累。但是业界已经有了很多成熟的架构设计模式,我们不需要闭门造车,可以在理解清楚业务需求后,找到相近的架构设计,然后基于成熟的架构设计方案,进行改造,变成适合自己业务需求的架构。
可以按以下步骤进行。
step1 分析需求
需要对产品需求进一步进行抽象。一个常用的分析方法就是分析用例,也就是了解主要用户校色和其使用的场景。
step2 选择相似的成熟的架构设计方案
在了解清楚需求后,就可以从业界成熟的架构设计模式中选取一个或几个。具体选择哪些架构设计模式,需要根据平时的学习积累来做判断。
在选好架构方案后,还需要考虑选择什么语言和开发框架。这部分选择需要根据团队情况和项目情况来综合评定。
step3 自顶向下层层细化
从整体到局部,不要过早陷入技术细节中。
层层细化的示例来啦~
step4 验证和优化架构设计方案
技术选型是项目决策
对技术的个人偏好很可能让我们在技术选型时,忽略架构设计的目标,导致满足需求的成本变高,或者运行成本居高不下。要做好技术选型,需要从项目决策的角度来选择合适的技术。
项目决策需要考虑:
项目决策中需要注意的坑:
项目决策可以分为几个阶段来进行。
1、问题定义
问题定义阶段需要明确两个问题:
只有明确了技术选型的目标,才有一个标准来评判该选择哪一个方案。
2、调研
在明确技术选型的目标后,需要进行调研看有哪些技术选型可以满足目标,可以从这几个方面去分析:
3、验证
可以通过一个快速原型项目,用候选技术方案快速做一个原型出来,做的过程中才知道,所做的技术选型是否真的满足技术选型的目标。
4、决策
在调研和验证完成后,需要召集所有利益相关人一起,就选择的方案做一个调研结果评审的会议,做出最终的决策。
架构的思维比架构的头衔更重要。
架构设计是要控制技术的复杂性。对于架构师来说,要控制技术复杂性,有几种有效的方式:抽象、分治、复用和迭代。架构师思维其实就是这几种思维的集合。
抽象思维:对需求进行抽象建模后,可以帮助我们隐藏很多无关紧要的细节,在高层次的架构设计时,可以关注在几个主要的模型上,而不必关心模型内的细节实现。
分治思维:架构设计的一个重点,就是要对复杂系统分而治之。
复用思维:通过对相同内容的抽象,让其能复用于不同的场景,是一种非常简单的提升开发效率的方法。
迭代思维:好的架构通常不是一步到位,而是先满足好当前业务需求,然后随着业务的变化而逐步演进。
一个好的架构师,不仅技术要好,还要懂业务;能从整体设计架构,也能在局部实现功能。
有一种架构师叫“PPT架构师”,哈哈哈哈
好的架构师应该具备以下能力:
要成为一个好的架构师,没有什么捷径,需要比普通程序员更多的努力才行,宝玉老师的建议:
技术债务时用来形容架构或代码上的质量问题的。
范围不减、成本不加,还想节约时间,就会影响到质量。技术债务就是软件项目中对架构质量和代码质量的透支。
技术债务具有以下特点:
技术债务的原因可以分为两个维度:
轻率-有意的债务:故意走捷径,没有设计、不遵守好的开发实践,对于债务没有后续的改进计划
谨慎-有意:清楚直到技术债务的收益和后果,并且制定了后续的计划去完善架构和提升代码质量
轻率-无意:团队不知道技术债务,也不知道要后续产幻技术债务的情况
谨慎-无意:重视架构设计和技术债务,但因为其他客观因素造成技术债务的产生
技术债务有利息也有收益,如何管理才能保证软件项目中的收益大于支付的利息。
这张图时描述设计、时间和开发速度的关系的。可以直观看出,收益和利息是存在一个临界点的,最好能让技术债务控制在临界点之下。
1、识别债务
软件项目中有很多指标来发现存在的技术债务:
2、处理技术债务策略
在识别之后,解决技术债务有三种策略:
3、实施策略
4、预防
最好的方法是预防技术债务的产生: