聊聊架构
  • 推荐1
  • 收藏4
  • 浏览1.4K

聊聊架构

王概凯 (作者) 

  • 书  号:978-7-121-31122-2
  • 出版日期:2017-04-19
  • 页  数:248
  • 开  本:16(170*240)
  • 出版状态:上市销售
  • 维护人:张春雨
纸质版 ¥69.00
架构是如何运作并影响人们的日常生活的,在软件行业中架构是如何运作的?架构又是如何指导代码编写的,如何把架构应用在软件工程实践上?带着这些疑问,本书通过大量的实例一步一步揭示出架构背后的原理,以及架构在软件行业的发展,并通过企业实例来展示软件架构的实际应用。本书没有高深的词汇,不仅适合IT从业人员阅读,也适合其他行业的人士阅读。尤其对于想从事架构工作的人而言,是一本不可多得的参考材料。
溯本求源 返璞归真

在软件行业,架构师和软件工程师是非常辛苦的职业。一方面新技术层出不穷,另一方面业务需求也层出不穷,让人疲于应付。导致的后果就是常常加班,生活质量低下。只有曾经身在其中的人,才能够体会其中的酸甜苦辣。

在软件行业经历过这么多年,也看到了软件行业普遍存在的一些问题,总觉得自己应该为这个行业贡献一点点力量。不期望能够改变这个行业,能够引起一点点思考也是好的,如果能够帮助提升一些软件从业者的工作和生活质量,就超出期望值了。

把自己的想法写出来的过程是痛苦的,从来没有写文字的习惯,也没打算过写书,因此愈发艰难。年初时基于以上同样的想法,在 InfoQ 投稿写了《架构漫谈》专栏,和大家分享一下自己对软件架构的思考,以为算是交差了。不料 InfoQ 的郭蕾多次和我约稿,希望我能够把架构漫谈扩展成一本书。拒绝了很多次,但是脸皮实在是薄,禁不住郭蕾三番五次的游说,狠狠心答应了下来。

把文字写下来传播出去,是要承担很大的责任的,一旦说得不对,伤害的是一大片人。不愿写东西的原因大部分在此。但是想想人非圣贤,总有犯错的时候,把自己的错误暴露出来给大家,也是帮助大家学习。话虽如此,还是郑重声明,本书的内容都是个人的思考和个人的观点,并非学术的结论,请各位读者不要当作结论全盘接受。反而读者应该质疑书中的各种观点,尽量自行思考,如此才会有所收获。本书的目的也仅仅是为了引发大家的思考。

思及自身水平有限,文字功底也差,难免伤人慧命,深感惭愧和惶恐!望各位读者,鉴其愚诚,不吝慈悲指正!


王概凯 Kevin








前言
现代的软件从业者,都受过良好的计算机和软件方面的教育。但是现代的计算机和软件方面的教育,基本上都是从科学研究领域脱胎出来的,教育的目的也理所当然的主要是为科学研究领域服务。而随着社会的发展,软件不断地渗透到不同的业务领域,涉及到普通人生活的方方面面。以科学研究为目的的软件教育,和日益深入人们生活的软件应用,产生了很大的隔阂。以致于很多计算机和软件专业毕业的学生,进入企业工作后,总是感叹学校所学习的知识派不上用场,必须得重新学起,才能够达到企业的要求。

而这些重新学习的内容,又往往是以技术为主的。技术的更新换代太快,往往也导致想跟上新技术的我们力不从心。技术和业务的关系是如何的?业务又是怎么运作的?很少有人去问这些问题。即使有人问了,也很难有人可以提供建议。

软件技术学习到一定的地步,又会发现软件架构是一个门槛。一直以来,在软件行业,对于什么是架构有很多的争论,每个人都有自己的理解。甚至于很多架构师一说架构,就开始谈论应用架构、硬件架构、数据架构等。而事实上,架构在软件发明时的很多年以前就已经存在了。众说纷纭,莫衷一是,这也给大家带来了很多困扰。

业务和架构,是压在软件从业人员身上的两座大山。而软件从业人员手上却只有一个武器:技术。可是这个武器还时灵时不灵,就好像金庸小说《天龙八部》中段誉的六脉神剑,并不总是能够解决问题,有时还会带来麻烦。

软件并不是虚无缥缈的东西,它和现实生活是紧密相关的。业务和架构都是处理人的问题。而技术人员最讨厌处理的就是人的问题,心里面厌恶,但却又无法逃避。因为这个排斥的心理,工作中始终想避开和人有关系的地方。因此在技术之前,还需要做一些准备工作,用来连接现实生活,联系上人,让大家知道处理人的问题并不可怕。建立了这个相关性,每个人就都可以自行思考了。

不仅人类受限于自身的生命周期,凡事都有其生命周期。理解了生命周期,就可以看到很多隐藏在背后的规律,以及这些规律之间的联系。因此,本书试图从生命周期入手,描绘出一张整体的画卷,帮助包括技术人员在内的大家定位自己处于什么地方,自己在起什么作用,别人又在什么地方,他们又在起什么作用。

明白了自己的位置和别人的位置,自然也就清楚自己有什么,缺什么,要往哪个地方走,从哪些地方入手了。所谓“知己知彼,百战百胜”,知道这些后中,面对人打交道时也就有了自己的思考方式,能够进行独立思考,对业务也不再厌恶以致于逃避,而是为能帮助业务人员分析及解决问题而自豪。

本书虽然不是技术书籍,不谈技术,但却是以帮助技术人员为出发点。本书的内容可以作为连接技术人员和现实世界的桥梁,用来使技术人员不再悬在空中使不出力。对于非技术人员而言,本书可以帮助其理解软件开发的特殊性,拉近与技术人员的距离,能够更有针对性地与技术人员合作。

当然,读完本书不会使读者突然学会神功,打通任督二脉。因为每个人的成长,最终还是要靠自己的思考和实践。本书的思考也不能够代替读者自己的思考,在解决某个业务问题时也无法从书中直接找到答案。本书可以提供给大家的是一个思考的出发点,一个思考的方向,一个思考的角度,使得大家不再惧怕或排斥业务,并可以像业务人员一样思考,和架构师一样思考,不再受困于业务和架构,甚至是技术本身。如果本书能够帮助大家跨过这个门槛,并从这里开始展开思考,那么目的就达到了。

目录

第一部分 认识架构
第 1 章 生命周期
1.1 生命周期的识别
1.2 核心与非核心生命周期
1.3 生命周期与分工
第 2 章 时间
第 3 章 为什么会产生架构
3.1 分工
3.2 分工和生命周期
第 4 章 什么是架构
4.1 架构产生的条件
4.2 什么是架构
4.3 架构的生命周期
第 5 章 架构和树
5.1 树与增长
5.2 架构和树
第 6 章 概念
6.1 何为名相
6.2 究竟什么才是相
6.3 概念是沟通的基础
6.4 把握概念的力量
聊聊架构
第 7 章 什么是抽象
7.1 个性与共性
7.2 个性是基础
第 8 章 识别问题
8.1 面对问题有哪些困难
8.2 如何识别问题
8.3 寻找问题主体
第 9 章 切分的原则
9.1 切分就是利益的调整
9.2 为什么需要切分
9.3 切分的原则
9.4 树和分层
9.5 切分与建模
9.6 切分的输出和组织架构
第 10 章 架构与流程
10.1 什么是流程
10.2 流程和架构拆分的关系
第 11 章 什么是架构师
11.1 架构师做什么
11.2 架构师也是人
11.3 人人都是架构师
11.4 架构师和权利
第二部分 软件架构
第 12 章 什么是软件
12.1 以模拟人为目标的冯诺依曼结构和图灵机
12.2 成本为王
12.3 天空才是极限
12.4 软件的作用
目录
IX
第 13 章 软件的生命周期
13.1 软件的开发生命周期
13.2 软件开发的增长
13.3 软件开发的迭代
13.4 软件的运行生命周期
第 14 章 什么是软件架构
14.1 要解决什么问题
14.2 分别是谁的问题呢
14.3 分别有什么问题
14.4 分析问题
14.5 会生成哪些架构
14.6 什么是软件架构
第 15 章 什么是软件架构师
15.1 软件架构师的区别
15.2 软件架构师的困境
15.3 生命周期的思考
15.4 软件架构师的权力
15.5 软件架构师和技术人员对技术的态度区别
15.6 架构师是技术的使用者
15.7 如何保障架构落地
第 16 章 业务、架构和技术三者的关系
16.1 什么是技术
16.2 业务和架构及技术之间的关系
16.3 技术人员和业务人员的关系
16.4 重新发明轮子
16.5 开源技术
第 17 章 软件研发
17.1 软件工程师的兴起和使命
17.2 分工的困境
17.3 软件的迭代
17.4 软件开发的分工
聊聊架构
X
17.5 软件开发模式和架构
17.6 软件工程师的支持者
第 18 章 软件的架构拆分
18.1 软件拆分的原动力
18.2 软件开发团队的拆分
18.3 软件的拆分
18.4 软件开发的基础技术
18.5 软件拆分的第二动力
18.6 架构一步到位
第 19 章 如何写好代码
19.1 什么叫业务逻辑
19.2 业务逻辑分散的危害
19.3 业务逻辑内聚的好处
19.4 代码架构实例
19.5 代码误解
19.6 软件的拆分
第 20 章 单元测试
20.1 什么是单元测试
20.2 单元测试的困境
20.3 单元测试测什么
20.4 如何改造代码
20.5 为什么要做单元测试
20.6 如何做单元测试
第 21 章 软件架构和面向对象
21.1 什么是面向过程
21.2 什么是面向对象
21.3 生命周期和面向对象及面向过程
21.4 架构和面向对象及面向过程
21.5 面向对象的误区
21.6 对象和生命
目录
XI
第 22 章 软件架构与设计模式
22.1 模式以及模式的意义
22.2 什么是设计模式
22.3 软件设计模式
22.4 设计模式和架构
22.5 设计模式的误区
第 23 章 软件架构和软件框架
23.1 访问类框架
23.2 业务类框架
23.3 什么是框架
23.4 框架的特点
第 24 章 软件运维
24.1 软件运行生命周期
24.2 什么是软件运维
24.3 运维的业务模型
24.4 控制变化
24.5 监控变更
24.6 预警变更
24.7 主导变更
24.8 提升变更质量
24.9 运维的架构拆分
第 25 章 软件访问生命周期
25.1 软件访问的业务模型
25.2 软件访问路径的架构拆分
25.3 大规模软件访问的架构拆分
25.4 集群
25.5 数据中心
第 26 章 软件架构和大数据
26.1 什么是大数据
26.2 如何做好大数据
26.3 软件大数据
聊聊架构
XII
第 27 章 软件架构和建筑架构
27.1 软件架构和建筑架构的目标之异同
27.2 软件和建筑的架构扩展之异同
第三部分 软件架构的应用
第 28 章 交易
28.1 什么是交易
28.2 货币的出现
28.3 企业的实质
28.4 软件对交易的影响
28.5 软件的交易
28.6 企业的核心
第 29 章 产品
29.1 什么是产品
29.2 什么是商品
29.3 识别产品
29.4 产品系统
29.5 产品列表
29.6 产品详情
29.7 商品的规则
第 30 章 用户
30.1 什么是用户
30.2 为什么需要用户
30.3 客户的出现
30.4 用户的生命周期
30.5 用户的识别
第 31 章 订单
31.1 什么是订单
31.2 订单的生命周期架构拆分
31.3 订单支付
31.4 订单生命周期
第 32 章 交易系统
32.1 企业的架构拆分
32.2 软件系统的建模
32.3 访问业务模型
32.4 交易软件系统的架构拆分
32.5 服务的产生和粒度
32.6 用户系统的拆分
第 33 章 事务
33.1 什么是事务
33.2 软件中的事务
33.3 数据库事务的滥用
33.4 数据库的正确使用方式
33.5 服务调用

本书勘误

印次
  • 页码:4  •  行数:10  •  印次: 1

    “虚线表示非生命周期”->“虚线表示非核心生命周期”。
    根据上下文,增加“核心”一词限定。

    warestar 提交于 2017/4/28 21:00:51
    张春雨 确认于 2017/5/3 15:29:05
  • 页码:12  •  行数:12  •  印次: 1

    “这样每个人为自己核心生命周期所花的时间就少多了,有更多的时间用来提升核心生命周期的质量“这一句, ”这样每个人为自己核心生命周期所花的时间就少多了“应该改为:”这样每个人为自己的非核心生命周期所花的时间就少多了“

    olchid 提交于 2017/5/2 16:45:24
    张春雨 确认于 2017/5/3 15:28:49
  • 页码:12  •  行数:12  •  印次: 4

    “这样每个人为自己核心生命周期所花的时间就少多了”
    应为
    “这样每个人为自己的非核心生命周期所花的时间就少多了”

    hl0737 提交于 2018/7/15 13:17:43
    张春雨 确认于 2018/8/21 15:44:56
  • 页码:38  •  行数:13  •  印次: 1

    降低数的层数。应该是“降低树的层数”

    liaojinhua 提交于 2017/5/6 10:11:34
    张春雨 确认于 2017/5/23 8:54:51
  • 页码:38  •  行数:13  •  印次: 2

    “降低数的层数”改为“降低树的层数”

    吴倩雪 提交于 2017/6/8 15:20:50
    张春雨 确认于 2017/6/14 9:06:32

读者评论

  • 拜读之后,关于访问通道不重用这块有些问题。
    我们现在的系统存在多种使用者角色与多个终端,如老师、学生、家长为三个使用者,App、Web为两个终端。
    老师、学生、家长所访问的数据实体是一种,App、Web同样如此,如试卷信息。
    这种情况下,应该如何拆分访问通道呢。

    faster-framework发表于 2019/7/10 15:25:04
  • 第4章 什么是架构 架构产生的条件 (1)必须由人执行的工作 不需要人介入,就意味着不需要改造;不需要节省时间,也就不需要另外再产生架构了。大自然会自行调整自然界本身的架构。既然是不需要人介入的,为啥又是必须由人执行的工作呢?

    liaojinhua发表于 2017/5/6 10:12:15
    • 读者朋友你好,你所提出的问题小编已转告本书的相关编辑,编辑近期会予以回复。

      博文小编发表于 2017/5/8 17:17:21
    • 这是不是随着社会的发展,人越来越多。需要有个人去整合资源。让人与人之间的合作更高效,类似建筑上的包工头,他要清楚每个人擅长的技术,并把任务分配给他。

      恬淡虚无发表于 2017/5/10 6:51:40
    • 这里作者是反证法,如果证明A不成立,A的反命题B就成立了。

      palmlan发表于 2019/6/4 8:36:51
  • 第125页 第21章 软件架构和面向对象
    21.1 什么是面向过程 第一段最后一句

    通过功能调用(Procedure Call)或者过程调用(Function Call)来组织调用的流程。
    英文反了, Function Call才是功能调用, Procedure Call是过程调用
    
    mushishi发表于 2017/4/30 15:15:08
    • 读者朋友你好,你提出的勘误小编已告知相关策划编辑。近期编辑会予以回复。

      博文小编发表于 2017/5/2 16:47:10
  • 本来想来这里给作者好评的,不知道你们怎么做到我无法在你们的评论框输入中文,只能在别的地方打字,然后复制过来

    wangshaohong发表于 2017/4/29 19:02:40
    • 感谢您的购买和阅读,如对图书有其他的意见和建议,在图书页面的读者评论处直接留言即可。

      博文小编发表于 2017/5/2 16:44:28

推荐用户