新書推薦:
《
亚述:世界历史上第一个帝国的兴衰
》
售價:HK$
107.8
《
大处着眼:持久战与《论持久战》
》
售價:HK$
85.8
《
人工智能与大数据:采煤机智能制造
》
售價:HK$
96.8
《
未来漫游指南:昨日科技与人类未来
》
售價:HK$
97.9
《
新民说·逝去的盛景:宋朝商业文明的兴盛与落幕(上下册)
》
售價:HK$
173.8
《
我从何来:自我的心理学探问
》
售價:HK$
119.9
《
失败:1891—1900 清王朝的变革、战争与排外
》
售價:HK$
85.8
《
送你一匹马(“我不求深刻,只求简单。”看三毛如何拒绝内耗,为自己而活)
》
售價:HK$
64.9
|
編輯推薦: |
软件设计不是那种空中楼阁,不是那种读完不知所云的神秘图谶,恰恰相反,设计是每时每刻都在进行的日常活动,它一点都不神秘,也没那么复杂。
本书力图从基本的需求出发,通过思考和分析,总结设计过程的每个环节中可能出现的问题和解决的方法,这样就把设计从离散的点连起来,从而可以让读者了解设计的真实面貌。
|
內容簡介: |
本书从最基本编程理论开始,探讨了软件设计中的基本概念,比如过程、对象、封装、继承、多态等;然后,在理清这些概念的基础上,书中集中探讨了构建好对象的若干原则;随后,在这些思想和原则的基础上,书中使用了大量的例子和篇幅分析了软件设计过程中可能遇到的典型问题及可能的解决方案。最后,本书会尝试脱离面向对象设计经验的束缚,直面设计的自然面貌:设计也许不轻松,但是也许并不那么的复杂。
|
關於作者: |
董向阳,上海梵讯网络技术有限公司项目经理,人们口中常说的程序猿,而且是高龄的(入行10年),.NET和Node.JS的铁粉,模式和架构爱好者,热衷于收集各种编程新技术、新框架;对于大师们的设计方案,向来都是先鄙视之,然后再膜拜之;空是其最为信奉的座右铭。
|
目錄:
|
目录
第1章 设计概论1
1.1 面向对象程序设计1
1.1.1 面向对象思想任督二脉1
1.1.2 面向对象设计原则九阳神功2
1.1.3 模式乾坤大挪移3
1.1.4 重构太极拳4
1.1.5 抽象与组合独孤九剑5
1.2 面向过程与面向对象5
1.3 设计的宏观面貌8
1.3.1 开发模式:自顶向下和自底向上8
1.3.2 开发方式:迭代9
1.3.3 开发结果:模块化10
1.4 设计的微观世界10
1.4.1 函数10
1.4.2 对象12
1.5 小结15
第2章 设计原则16
2.1 通用原则16
2.1.1 KISS原则16
2.1.2 代码之形17
2.2 核心原则20
2.2.1 单一职责原则(SRP):做一个专一的人20
2.2.2 开放封闭原则(OCP):改造世界大部分不是破坏原来的秩序21
2.2.3 里氏替换原则(LSP):长大后,我就成了你24
2.2.4 接口分离原则(ISP):不要一口吃成胖子26
2.2.5 依赖倒置原则(DIP):抽象的艺术才有生命力27
2.3 扩展原则28
2.3.1 迪米特法则:尽量不与无关的类发生关系28
2.3.2 好莱坞法则:不要调用我,让我调用你29
2.3.3 优先使用组合原则:多使用组合,少使用继承31
2.4 小结33
第3章 设计过程34
3.1 设计目标35
3.1.1 对象设计目标高内聚 低耦合35
3.1.2 对象设计过程折中 迭代 重构36
3.2 对象来源38
3.3 对象创建41
3.3.1 直接创建对象41
3.3.2 间接创建对象44
3.3.3 对象创建时机51
3.4 对象管理57
3.4.1 线性结构集合对象57
3.4.2 树形组合结构65
3.5 对象交互71
3.5.1 组合直接引用,互通有无71
3.5.2 中介者间接通信74
3.5.3 事件使用回调函数通信77
3.5.4 交互即耦合84
3.6 对象存储84
3.6.1 文件存储85
3.6.2 数据库存储94
3.7 访问控制114
3.8 组织协作132
3.8.1 代码的组织方式同步 异步 多线程132
3.8.2 业务的组织方式138
3.9 对象布局155
3.9.1 进入业务逻辑系统的第一道门槛Controller155
3.9.2 为什么要分层分层的意义155
3.9.3 如何分层价值导向156
3.9.4 层的对接模块化与面向接口编程171
3.9.5 接口的转换适配器172
3.9.6 接口的简化门面175
3.9.7 层的载体包179
3.9.8 分层的代价效率和复杂性180
3.9.9 层效率的有益补充180
3.10 应对变化183
3.10.1 变化的根源184
3.10.2 变化的种类184
3.10.3 处理变化的原则186
3.10.4 应对变化的设计思路189
3.11 小结199
第4章 模式200
4.1 模式定义200
4.2 模式的意义202
4.3 模式有缺点吗203
4.4 设计的四个阶段206
4.4.1 第一个阶段:设计不足207
4.4.2 第二个阶段:模仿设计208
4.4.3 第三个阶段:过度设计208
4.4.4 第四个阶段:适度设计213
4.5 反模式214
4.5.1 开发流程反模式214
4.5.2 数据库设计反模式215
4.5.3 密码管理反模式217
4.5.4 .NET开发反模式217
4.6 小结220
第5章 重构221
5.1 重构动机221
5.1.1 软件代码是会腐烂的222
5.1.2 破窗效应223
5.1.3 技术债务224
5.2 重构的定义224
5.3 重构难题224
5.3.1 技术上的难题225
5.3.2 管理上的难题225
5.3.3 个人难题程序员心理学226
5.4 好代码长什么样226
5.5 重构技法230
5.5.1 基本技法重命名235
5.5.2 第一种技法转移职责237
5.5.3 第二种技法封装细节243
5.5.4 第三种技法抽象对象254
5.6 重构实施259
5.6.1 重构的实施方式259
5.6.2 重构的质量261
5.7 小结266
第6章 回到起点267
6.1 忘掉模式267
6.2 忘掉对象269
6.3 回到起点276
6.3.1 设计原本277
6.3.2 设计的静态性277
6.3.3 设计的动态性289
后记292
|
內容試閱:
|
1.1.1 面向对象思想任督二脉
基本上,任何用过面向对象语言(如Java、C 、C#等)的同学们张口就能说出面向对象的三大特征:继承、封装、多态。但是又有几个人曾试图深层次地了解过这6个字背后的含义呢?
面向对象思想是软件工程发展史上的伟大里程碑,它提供了软件设计与开发的新思路:那就是一切皆是对象。这种思想体现了人们对世界的重新认识。这种认识体现到实际的行动中,就是使用对象去表述世界发展的一切活动。为了生动描述事物之间特性的传承性,继承就诞生了;为了描述事物之间相同特性基础上表现出来的差异性,于是多态就被创造出来;为了描述事物的完整性和相对封闭性,封装就提上了日程,细节从此不需要再去关注。这是面向对象世界观的三大基本特征,也是面向对象设计的核心根基,只有深刻理解了它们,时时刻刻记住它们,把它们深深地融入到你的日常活动中去,你的神功才会一日千里。
1.1.2 面向对象设计原则九阳神功
当你能做到任何时候、任何场合,眼中只有对象的时候,那么恭喜你,你的任督二脉已经打通!你可以学习任何一门高深的内功了。为什么先学习内功呢?这个大家也都非常熟悉,没有内功的配合,任何高深的招式都是浮云。所以要想天下无敌,必须要练就一身深厚的内功,比如九阳神功。
对象的三大特征全都有了,表明在你眼中一切都应该是对象了,你已经是面向对象了,但是并不是说这就是好的面向对象了。
如何评判一个系统是好的面向对象呢?一般是参照SOLID标准。
单一职责原则(SRP):做一个专一的人
做好并且只做好一件事,这条原则其实不仅仅适用于对象,同样适用于函数、变量等一切编程元素。当然,在商业模式中,将一件事做到极致就是成功,笔者觉得也还是成立的。
开放封闭原则(OCP):改造世界大部分不是破坏原来的秩序
在对象世界中,添加新的功能一般意味着新的对象,一个好的设计也意味着这个新的修改不要大幅度波及现有的对象。这一条理解起来简单,实施起来却最是困难。无数的模式和解耦方法都是为了达到这个目的而诞生的。
里氏替换原则(LSP):长大后,我就成了你
父类使用的地方,子类也可以使用。这一条希望子类不要破坏父类的接口成员,一旦破坏了,就如同人与人之间破坏合同一样,有时候会很糟糕。
接口分离原则(ISP):不要一口吃成胖子
接口不要过于庞大,繁杂的东西是难以理解、难以扩展、难以修改的。这一条的目的与单一职责原则类似,不过是更加强调了接口的逻辑一致性和简易性。
依赖倒置原则(DIP):抽象的艺术才有生命力
高层与底层组件之间都应该依赖于抽象的组件。这一条深刻揭示了抽象的生命力,抽象的对象才是最有表达能力的对象,因为它通常是无形的,可以随时填充相关的细节。
|
|