绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
架构基础(三):架构原则,架构设计需要注意哪些问题?
2023-03-29 17:42:02

一.设计原则
 架构设计我我们平时写代码不一样,两者的差异主要体现在“不确定性”上。对于编程来说,本质上是确定的,对于同样一段代码,不管是谁写的,不管什么时候执行,执行的结果应该都是确定的;而对于架构设计来说,本质上是不确定,并没有像编程语言那样的语法来进行约束,更多的时候是面对多种可能性时进行选择。
 示例:

是要选择业界*先进的技术,还是选择团队目前熟悉的技术?
是要选 MySQL 还是 MongoDB?团队对 MySQL 很熟悉,但是 MongoDB 更加适合业务场景?
淘宝的电商网站架构很完善,我们新做一个电商网站,是否简单地照搬淘宝就可以了?

1.合适原则
合适优于业界领先。

 在进行架构设计的同时,需要考虑自身业务,而不是一味的去参照业界的规模,如:QQ、微信、淘宝架构。真正的架构都是在企业当前人力、条件、业务等各种约束下设计出来的,能够合理地将资源整合在一起并发挥出大功效,并且能够快速落地。


2.简单原则
简单优于复杂。

 软件架构设计是一门技术活,当我们进行架构设计时,会自然而然地想把架构做精美、做复杂,这样才能体现我们的技术实力,也才能够将架构做成一件艺术品。然而,“复杂”在制造领域代表先进,在建筑领域代表领先,但在软件领域,却恰恰相反,代表的是“问题”。

 软件复杂度的体现,主要有以下两个方面:

结构的复杂性
– 组成复杂系统的组件数量更多;
– 组件之间的关系也更加复杂。
其问题主要有:
(1)组件越多,就越有可能其中某个组件出现故障,从而导致系统故障。
(2)某个组件改动,会影响关联的所有组件。
(3)定位一个复杂系统中的问题总是比简单系统更加困难。

逻辑的复杂性
逻辑的复杂性来源于一个组件集中了太多的功能,修改协作困难;并且,其中某些业务还可能使用了一些复杂的算法,导致难以理解、修改困难。

 一个组件集中了太多功能,就会表现出一些逻辑复杂性的特征,为了解决这个问题,一般的手段是进行组件的拆分,但随着组件的细化,又会引入结构复杂性的一些特征,所以,在做结构设计的时候,需要权衡这两者。


3.演化原则
演化优于一步到位。

 维基百科对“软件架构”的定义如下:

从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。

 这个定义中,将建筑和软件架构做了一个比较,但是,两者之间是有一个本质区别的:对于建筑来说,永恒是主题;而对于软件来说,变化才是主题。
 也就是说,软件架构的本质是:软件架构需要根据业务发展不断变化,所以,我们在做软件架构设计的时候,不要试图一步到位设计一个软件架构,期望不管业务如何变化,架构都稳如磐石。


 架构设计的过程基本上可以总结为下面三个历程:

首先,设计出来的架构要满足当时的业务需要。
其次,架构要不断地在实际应用过程中迭代,保留的设计,修复有缺陷的设计,改正错误的设计,去掉无用的设计,使得架构逐渐完善。-- 小重构
后,当业务发生变化时,架构要扩展、重构,甚至重写;代码也许会重写,但有价值的经验、教训、逻辑、设计等(类似生物体内的基因)却可以在新架构中延续。-- 大重构
 我们在做架构设计的时候,切勿贪大求全,或者盲目的照搬大公司的做法,而是要牢记软件架构的本质(软件架构需要根据业务发展不断变化)。认真分析当前业务的特点,明确业务面临的主要问题,设计合理的架构,快速落地以满足业务需要,然后在运行过程中不断完善架构,不断随着业务演化架构。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

企业架构和业务架构
创建时间:2023-03-28 17:19:45
企业架构和业务架构
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • LCR_
    栈主

小栈成员

查看更多
  • blockchain17
  • 向上九五
  • 蓝桥等候谁
  • he9281
戳我,来吐槽~