『互联网架构』软件架构-软件系统设计(一)

原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
原文链接地址:『互联网架构』软件架构-软件系统设计(一)

按照正常的互联网玩法,产品经理原型画好进行需求评审,评审完后,需要把需求丢给技术经理,或者技术负责人,进行一整套的概要设计,然后针对概要设计评审,概要评审后进行开发。这次咱们一起说说概要设计的体系结构。了解下套路。

软件系统设计

软件系统设计在很多人眼里就是写文档,写文档是一种负担,其实系统设计头脑风暴,是一种非常开心的事情。所以必须掌握什么是系统的设计。它里面有哪些方法论,如何去做一些系统设计。

我们平常做开发设计吗?

才毕业回郑州那几年,都是一句话就是需求,开发完了河南本地连个测试人员都没有,开发人员说开发完了就开发完了,直接拿给用户进行测试。有的用户直接骂娘,有的用户用的感觉很不爽哭的(工作没做完),有的用户直接摔东西的。聪明的一点的用户都直接联系开发人员帮他来操作。直接测试都没有,用户就是测试人员,说实话7,8年前的告诉用户怎么用,他怎么用。他感觉很神秘,这几年随着互联网产品越来越多,智能手机的普及,大家对软件的要求越来越严格了。很多之前的习惯的同事,现在都没转变过来,真是土,土的掉渣。后来其实也没太关注设计,可能就是之画个图。直到后来跟第三方系统进行交互数据,刚开始草草的设计下,导致之后的2个月都没好过。所以说系统设计是一项非常重要的工作。而不是老铁们经常说的就是写个文档就行了。

  1. 拿这键盘直接干。
  2. 深思熟虑,考虑到多方的问题,在开始我们的编码。
  3. 需求里面是一句话,直接就是干,别墨迹。
  4. 做设计的时候,开发人员在考虑?还是技术经理在考虑?

用什么方法做?

瀑布流程(互联网直接忽略)

需求确定的基础上,系统设计的方方面面设计的都很全面,把每个阶段都有非常严格的验证条件,在主流的大型软件的开发方式。

基于原型,快速迭代(互联网常用)

许多创业公司的老板真心喜欢,感觉业务可以进行快速的开发,其实在里面还是有很多的坑在里面的。很少有人基于瀑布来开发。其实快速迭代也变成了很多老板让各位老铁赶项目的理由了。我几个亿的单子,先让用户验证,让用户体验到,大家不能耽误我们伟大的商业模式,就算是这种开发模式也是需要有文档的,对设计不清楚的地方也会有很多,很多的坑在里面,包括后期的性能和扩展也好,如果前期底子没有搭建好的话,后期伤筋动骨。随随便便改一个小功能可能要对程序进行伤筋动骨。但是这个时候老板是不会管你的,测试人员更不会管你,产品也不会管你,他们只知道我们满足业务和需求。

具体设计什么

具体到底需要设计什么?如果系统没有做好一个设计,如果你还是基于所谓的原型,快速迭代敏捷开发以这为借口的话,程序后期越来越大,越来越大的时候真心很伤,根本都不改你的系统,就比如说:银行,社保里面的代码基本是10年前的代码,里面的问题一大堆,但是没有人敢改,这也是设计部合理导致的一个毛病。

  • 体系结构设计
    1.指明了一个系统是什么,它是整个软件中最本质的表现

开发人员看文档的时候,首先就要看体系结构。它是软件系统最本质的东西,主体的形态,人的骨架就是体系结构。如果你设计的体系结构是个大猩猩,后期不管如何进化,如何发展,它始终无法变成一个人,只能是个猩猩。比如盖房子,可能盖高层,可能盖土房,可能盖平房,或者是窑洞,一开始就想盖高层,它需要的材料,地基深度什么都是不一样的。所以体系结构就需要了解软件设计的本质。也可以说架构。

2.应当设计的很稳定

盖到一半,要换地基是不是很悲催。开发的设计的时候一定要三思而后行。

3.设计的原则

3.1 适应性

    满足用户需求,达成商业的目的。而不是开发人员自己歪歪,高水平的设计人员就是设计出来刚刚满足用户需要的软件,而不是不惜一切代码设计出来一个最先进的软件,没有最好,只有最合适。打造闭环是最好的,对于很多互联网项目,可能不是刚需需求,可能不是成熟的商业模式,如果非要进行闭环,试错的机会都不给,开发的成本老板接受不了,老板无法快速推广到市场里面。开发的功能越多,功能越强大的话,一旦业务发生调整的话,软件不好发生变动。所以要分为很多个阶段。开发和产品经理很多容易犯这个毛病,刚开始就设计都喜欢大而全,精而细。 产品经理经常爱说:『别人的系统都有这个功能,你为什么做不了!』,其实可以这么怼过去,给他上一课:『这样的产品设计根本就不能满足现阶段产品设计的适应性!』

3.2 结构稳定性

    我们设计的要相对的稳定性,一定确定一定要相对的稳定性,如果经常变动,就相对于房子的地基,你看到那个房子盖好后的地基经常发生变动。如果软件经常发生,太悲剧了。体系结构设计的不稳定,范围不清楚,如果一个系统刚开始是B2C,突然要变成B2B,表结构,系统模块,界面,全部都要发生比较大的改变。整个项目变的很轮乱,需求不停的变动导致系统很混乱。导致开发人员不敢动代码(牵一发动全身),都是复制一份 代码。最后维护多份代码。对于高水平的设计师都是有一定经验的,可以预先知道那些需求是基本不变的,那些需求是可变的。
必须导出:可变需求和可变需求。
    举个例子:之前项目中针对消息中心的设计,消息中心:对于用户来说会有很多种类的消息。消息除了pc端,移动端也有很多的消息,物流消息,营销消息,通知消息。当时就有一个问题, 实际的消息中心,就是接收到各种渠道的消息,然后分发到各个平台(邮件,短信,推送,系统消息信息)。之前没有消息中心,都是业务方自己各自来完成的。为了满足原子性,原子是不可变的,消息中心需要做的就是按照业务方的需求把消息发送出去,发送到对应的渠道,短信。但是消息中心是在业务平台之后设计的,业务平台不可能因为发送消息修改自身的业务代码。在消息中心专门设计了一个监听模块,监听业务方的一个动作,这个模块跟业务平台是紧耦合的,事件监听模块随着业务而变动,消息中心的核心功能不会发生变动的,因为功能很纯粹就是发消息,收消息,推送消息。这就是当时如何保证稳定性的问题。在模块上进行划分。如果之后在需要拆分的话,直接把模块进行拆分。监听模块,按照业务的变更进行变更。
     稳定性,就不会被业务需求方赶着走,项目是可控的。天天不用担心老板又有新需求。

3.3 扩展性

    软件在扩展新功能的难易程度。扩展性越好,适应变化的能力越强,尤其是敏捷开发,如果扩展能力不强的话,很容易进入一个死胡同里面去。区分可变动和不可变动。软件体量约小,扩展能力越强,船小好调头。为什么项目分阶段,就是为了可扩展。系统的体量肯定受限业务的,越大的项目扩展性越难,所以要进行分布式(应用层,中间业务层,原子服务层),分层(控制层,服务层,数据访问层),越是往下稳定。
    合理的业务模块划分,扩展的时候根据模块进行拆分扩展。业务的边界划分。

3.4 是不是所有的系统在设计的时候都要考虑扩展性

    一次性项目,只要完成现阶段的功能就可以了,例如两个单独的公司的对接接口,其实很多时候因为可能是一次性的,没必要考虑扩展性,如果考虑可能就变成了过度设计。如果做开放平台的话,肯定要考虑扩展性。

3.5 可复用性

    用一次还可以继续在用,工具类,公共的组件。工具类一定设计的纯粹(对使用环境没有假设,少配置零配置,没有依赖)

  • 表结构设计
  1. 方法论
  2. 表结构设计
  3. 性能扩展性考虑
  • 系统的模块设计

  • 原型界面设计

  • 设计模式

  • 数据结构和算法

PS:在之前也是不做设计的,但是做过设计的后明显是跟不做设计有很大的区别的。很多提前设计的好,做设计很容易可控。不管大家对设计的理论有多少,设计是必须的。凡事预则立不预则废。设计是为了让开发,测试人员,产品经理(设计没有偏差)。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 第八章 系统分析与设计方法 8.1 定义问题与归结模型 定义问题的过程包括:理解真实世界中的问题和用户的额需要,并...
    步积阅读 3,888评论 0 12
  • 第十四章 信息系统基础知识 信息系统是一个由人、计算机等组成的能进行信息的手机、传递、存储、加工、维护和使用的系统...
    步积阅读 2,331评论 0 12
  • 朋友对于我而言意味着什么,是心灵的陪伴,即使相隔很远,一个电话聊聊天似乎也是近在眼前。朋友也是镜子,承载着...
    Ju_Ju阅读 194评论 0 0
  • CAGradientLayer是CALayer的子类,通常我们用它最多的地方是用来做渐变色,下面我们来看一下它的属...
    堂吉诃德灬阅读 3,586评论 0 1
  • 1.你生命中所发生的一切,都是你吸引来的。 2.我想什么,我就能得到什么! 3.宇宙中最强有力的法则就是吸引力法则...
    阳光雨露666阅读 225评论 0 0