查看原文
其他

20年开发经验总结,“设计模型”才是架构设计的魂!

Java之间 2020-10-17

点击上方Java之间”,选择“置顶或者星标”

你关注的就是我关心的!

作者:疯狂的肉丝面

说到架构设计,大家都可以侃侃而谈,都有自己的一套看法。实际上设计思维早在没有软件的时候就存在了,包括建筑设计,艺术设计等等。实际上我们今天是想谈谈“设计模型”的思维是否能够对我们的架构设计有一些帮助和启发。

什么是设计

简单的说设计分为三个步骤,这三个步骤有先后的顺序,分别是

构想:根据目标形成的概念。这个东西看不见摸不着,但是它是可以满足我们需要的产品或者服务的需求。而且这个概念往往存在于设计者的大脑中。

实现:真实存在的产品或者服务。这个东西看得见摸得着,是一个真实的交付物,能够提供人们服务/产品,满足人们的需求。

交互:人们对实现的具体产品服务进行互动,产生一些使用的体验。例如:我们的产品经理提交原型给客户,客户会根据原型的交互方式提出修改意见。又或者,真实的APP上线,用户也会对功能评头论足一样。

这三个步骤/阶段本身有先后顺序又互为依赖,并且是一个不断循环的过程。

设计的价值

我遇到过很多项目在获取用户需求以后第一个想到的是:“先建立数据库,把功能实现起来”。结果几个“大神”就开始了牛仔式的编码之路了。这种开发方式看上去高效快捷,让人联想到“敏捷”。但是随着项目的推进用户需求的增加,功能的增加,开发人员的增加,我们会发现开发起来没有方向。对于公用功能没有整理抽象,网络调用协议千人千样,维护代码的同事需要忍受不同风格的开发方式。这些问题都是没有设计造成的。这里的设计不但包括,软件架构设计,编码规范,单元测试规范,也包括数据库设计,系统设计,网络安全设计等等。设计就是我们开发的指路明灯,帮助团队提高开发效率,帮助投资人高效地拿到交付物。

架构设计师的理性模型

即然设计这么重要,那么我们在设计的时候特别是软件架构设计的时候是否有规律可循呢?答案是“有”。理性思维模型包括以下几个方面:

目标:这个很容易想到,目标就是用户价值,也是我们努力的方向。也是我们为什么要做这个软件的原因。

必要条件:这里包括硬件条件,软件条件。例如:服务器,数据库,中间件,第三方组件,开发人员,测试人员,项目经理等等。这里也可以理解为需要的资源。

加权效果值:根据必要条件在系统中的重要程度,紧急程度,以及成本通过打分的方式来评估哪些必要条件是需要专注提高的,哪些必要条件是需要放弃的。

约束:我们做任何的软件交付所需要的资源都不是无限的,都需要加上一个限制条件,例如:项目完成时间点,需要用到的服务器数量,存储数据库的大小,需要开发,测试人员的数量。这些都是用来制约或者考核项目的标准。

设计树:无论这个产品/服务有多么的复杂我们都要用设计树的思维对其功能做划分和定义最生成的功能列表才是我们交付的方向。

这里以闹钟为例,把这个产品按照外观和功能分成了两个分支。每个分支又根据具体细节站考讨论,直到叶子结点(无法在细分)。同时可以针对每个叶子结点,为每个细分的功能打分,打分的规则可以根据加权效果值来计算。打分的目的是看是否有必要,或者是否有能力完成这个功能,例如:完成某个叶子功能需要的成本很高,那么这个功能节点需要暂缓。同时,可以回溯到这个节点上一层的节点,继续寻找及重要性价比又高的功能点。实际上我们在项目中做需求分析的时候也可以利用这个思维把哪些权重高的需求先挑选出来完成。

总结:早在软件设计之前人们就开始了设计工作,设计的思路,设计带给我们的好处是明显的。最为软件工程师/架构师可以应用理性思维模型帮助我们的架构设计工作。


原文链接:

https://www.toutiao.com/i6684121992011973132/

最近热文阅读:

1、为什么架构师一定要懂“故障隔离”?

2、我是一条DQL

3、你真的理解零拷贝吗?

4、90%程序员面试都用得上的索引优化手册

5、90%架构师都知道的压力测试,你知道吗?

6、为什么程序员都不喜欢使用switch而使用if来做条件跳转

7、分享一些好用的 Chrome 扩展

8、分库分表就能无限扩容吗,解释得太好了!

关注公众号,你想要的Java都在这里!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存