软件工程之美
宝玉
Groupon 资深工程师,微软最有价值专家
44272 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
软件工程之美
15
15
1.0x
00:00/00:00
登录|注册

21 | 架构设计:普通程序员也能实现复杂系统?

总结
推荐学习材料
如何做好架构设计?
什么是架构设计?
为什么软件项目需要架构设计?
架构设计

该思维导图由 AI 生成,仅供参考

你好,我是宝玉,我们已经正式进入到“系统设计”这个主题模块,今天我们先来聊一聊“架构设计”。
早些年,软件很简单的时候,不需要需求分析和架构设计,直接采用边写边改(Code And Fix)模型,也能做出来。后来软件复杂了,就对程序员要求特别高了,所以早些年的软件开发,都是个人英雄主义盛行。比如张小龙一个人完成了 Foxmail,求伯君完成 WPS,王江民写 KV 杀毒软件……
不过,那时候对于普通程序员来说,去写这样复杂的系统,也是可望而不可及的。再后来软件产品越发复杂后,靠高手的开发模式也不可行了。
软件需求越来越多,而高手又是稀缺资源,所以要解决的一个问题就是:让普通程序员也能参与其中,一起实现复杂系统,而不必依赖于很多精英。

为什么软件项目需要架构设计?

要想实现让普通程序员也能实现复杂的软件系统,我们先要看看什么样的是复杂的软件项目。复杂的软件项目,通常有两个特点:需求不确定和技术复杂。
关于需求不确定,我在前面的文章已经讲了很多,我们主要来看看技术的复杂性。技术的复杂性,主要体现在四个方面。
1. 需求让技术变复杂
如果需求本身很复杂,那么对应的技术也会很复杂。比如说你做一个个人博客网站,和做一个淘宝这样的网站,技术复杂度是有天壤之别的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

架构设计在软件开发中扮演着至关重要的角色。本文从软件项目的需求不确定性和技术复杂性出发,阐述了为什么软件项目需要架构设计。技术复杂性主要体现在需求、人员、技术本身和软件稳定运行等方面。架构设计通过降低开发成本、帮助人员高效协作、组织好各种技术以及保障服务稳定运行,解决了技术复杂性带来的问题。文章还介绍了架构设计的方法,如微服务架构、前后端分离和分层设计,以及架构设计的“道”,即组织人员和技术把系统和团队拆分,并安排好切分后的排列关系。通过这些方法和道,架构设计将系统分拆、将人员分拆,并通过约定好的协议相互通信,共同实现最终的结果。文章深入浅出地解释了架构设计的重要性和实现方法,对于软件开发人员具有很高的参考价值。文章还提到了架构设计的四个基本步骤:分析需求、选择相似的成熟的架构设计方案、自顶向下层层细化、验证和优化架构设计方案。通过良好的架构设计,可以有效降低开发难度和成本,让普通程序员也能实现复杂系统。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件工程之美》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(18)

  • 最新
  • 精选
  • 易林林
    淘宝这样的网站,需求复杂、功能点多、访问量大,微服务可以对各业务进行拆分,细粒度的保证功能的清晰度和完整性,方便多人分工协作;降低相互间的依赖,减少资源冲突,以便于维护和部署。与此同时,在访问量大的时候,可以很容易的进行网络数据分流,减小单个服务的负载。 而个人微博,需求点少,功能单一,基本上只是作为数据输出的载体,不需要用户过多的交互操作,并发访问量也不会太大,一般单个服务就可以胜任。 极客时间的架构我觉得使用微服务架构比较好,用户管理、专栏文章管理、视频教程管理、评论管理、支付管理、优惠活动管理等等需求相对比较复杂,使用单服务不利于扩展、维护和部署。另外,还要考虑安全性、稳定性、流畅性方面的问题(钱啊,很重要,容不得半点马虎)。

    作者回复: 👍感谢分享! 微服务是个不错的选择。 极客时间好像不是用的微服务,参考这篇《极客邦池建强:难的不是从零打造一款产品,而是…… 》: https://www.infoq.cn/article/q7xlHaaiZ-9H6SwHXCNg

    2019-04-16
    12
  • 一路向北
    架构设计,一要有思想为基础,二是必须实践相结合,架构设计需要有高屋建瓴的眼光。架构的思想相当于是前人实践经验的总结。不过每次看这些架构的思想方法的时候,总是和实际的应用没能很好的结合起来,原因是不是架构设计的实践不够?或者是对各种实现的分析和思考太少?

    作者回复: 我觉得不仅要有架构实践,还要有不同场景的实践。 举个例子来说,你平时做企业应用架构,没什么流量,没多少数据,复杂的地方都在业务逻辑,这时候你去看那些讲大数据、讲高并发的文章,很难带入到场景去。 还有就是一些架构,不自己搭一遍是很难了解其中的优缺点的,这也是另一个原因。 可以考虑有机会自己尝试把看到的一些好的架构实际的用一个原型程序搭一遍,造一点数据出来,用工具压测一下,这样会更有感觉更有深刻体会。 和实际应用想结合的问题,一方面说明你现有的架构可能并没有什么大问题,没有那么迫切的需求要改造;另一方面可能还是因为缺少实践经验,心里没底,不知道真用上了有没有用。 一点浅见,供参考。

    2019-04-18
    5
  • hua168
    宝哥,架构师与开发有什么区别呀? 架构师一定要懂开发吗?是不是只负责架构设计然后让开发去做就行了? 感觉架构师比开发清闲呀,名字也高大上,工资也不错吧~~~

    作者回复: 这个问题下一篇就会详细解答 :) 架构师可不清闲,只是分工不一样而已,架构师大部分时间不是在写代码,而是在了解业务,在构思架构,做好比开发难多了。工资也要高很多!

    2019-04-17
    4
  • Mr.Chen
    老师好,持久层应该怎么理解,我感觉是数据库和数据操作层的和

    作者回复: 持久层如果包括数据存储(数据库和文件存储都算),那么就是你说的“数据库和数据操作层的和”。 如果和数据存储层分开,那么就是指数据库访问相关操作。

    2019-07-25
    3
  • 纯洁的憎恶
    降低软件工程的参与门口,以调动更大规模的协作,从而解决更难更大的软件问题。架构设计可以在一定程度上解决技术复杂度问题,从而降低软件开发的复杂度,让更多的普通程序员参与进来。分而治之。把复杂系统抽象分解为多个简单的小模块,或者划分若干相对独立的层次,不至于牵一发而动全身。

    作者回复: 👍很好的总结分享

    2019-04-23
    3
  • alva_xu
    老师,我们正好在考虑SOA架构,研究esb、api gateway等。前几天我写了篇文章发在博客上了,请老师点评。谢谢。《从巨石应用到微服务应用,从ESB到APIGateway,从前后端分离到中台出现,九九归一,Rest要一统天下?》, https://blog.csdn.net/alva_xu/article/details/89052040

    作者回复: 已拜读!因为对你的业务不了解,也不好妄加评价。 当业务复杂到一定程度,分拆是很有必要的👍

    2019-04-16
    3
  • butterflies
    老师您好,我现在自学python 遇到一些瓶颈,写的脚本有时候总是进行有难度,页面跳转还有页面闪退都有问题?还有对一些项目架构理解不够深刻 请问老师怎样才能更好的去实施呢?

    作者回复: 我觉得遇到这种问题,你可以先识别一下问题,比如说页面跳转或者页面闪退有问题,需要先甄别问题在哪里,如果还不能甄别,那么先增加一些相应的日志,缩小问题范围,直到能找到问题在哪里,找出来问题就好寻找解决方案了。 解决问题的时候,总结归纳,解决一个问题争取能把一类问题都解决,以后再遇到类似的问题就不用担心了。 项目架构理解是需要一个过程的,一开始先看,了解有哪些好的架构,然后再是用架构,用的过程中去体会总结架构好的地方不好的地方,或者说适用的领域,以后就知道什么情况下用什么架构了。 架构的实施可以先从模仿开始,然后逐步增加适合自己业务特点的内容,最后再考虑是不是要设计出自己业务特色的架构。

    2019-05-09
    2
  • Felix
    深受代码整洁之道影响,喜闻架构整洁之道一书,立即入手,期待ing

    作者回复: 确实是很不错的书👍

    2019-04-18
    2
  • 青石
    项目计划和架构设计类似,都是自顶向下,由粗到细的过程。 至于用图说话,只能勤画来练习了。确实很佩服那些脑子里装满了流程图的兄弟。

    作者回复: 是的,其实多画画就越来越熟练了。

    2019-04-16
    2
  • gfkdcadet
    老师推荐的资料一流!

    作者回复: 赞,有用就好。也欢迎推荐你觉得好的资料。

    2019-04-16
    2
收起评论
显示
设置
留言
18
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部