《软件开发面面谈》

各位兄弟姐妹,平时我们都是以文会友,比武招亲,今天在下要向大家隆重推荐一本奇书。它可谓是居家旅行必备,防暑降温佳品,健身自卫良友……家有儿女读书习字,背一首唐诗,读两页代码,左右脑全面开发,妈妈再也不用担心学习了。出门在外,难免碰上昆山龙哥,本书纸张结实,质量可靠,退可挡,进可拍,正当防卫所向披靡。炎炎夏日清风难觅,用作扇子无异味,有书香。压力山大辗转难眠,读五分钟进入梦乡,无副作用且不做噩梦。

自序

开发软件离不开编写代码,但仅仅具备编程的技能也还不足以胜任开发软件的工作。这就好比一个人会烧砖、砌墙,但要造一间可供人居住的屋子,他还得了解屋子的结构、不同房间的功能、水电管线的敷设、墙面地面的装修等方面的知识。对软件开发人员来说,编程领域的知识往往是最受关注的,它们确实也可以分为多个层次:编程语言本身的知识,如C、Java;编程范式和思想,如面向对象编程和函数式编程;开发框架的知识,如Spring、AngularJS等等。一个新人若想以软件开发为职业,大概阅读的范围就会集中在以上领域。然而,当他开始项目开发时,就会发现有许多实际的问题需要考虑和解决,软件开发并不像编程教材上的代码样例和习题那样专注于某个算法或思想。

不妨考虑一个典型的业务系统,它是一个图形用户界面的程序,因而需要采用某种GUI框架开发界面;用户在界面上的操作通过事件机制调用相应的处理程序;用户界面、事件处理程序和体现需求的业务逻辑必须组成某种合理的结构,否则系统会随着功能的增加迅速变得难以理解和维护;系统越大,组件越多,越需要适当地保持它们之间的依赖关系,合理地应用接口是关键;这个业务系统显然比所有数据都来自即时输入的计算器复杂,许多信息要往返于数据库;最后,这是一个多用户使用的系统,必须适应不同用户的权限需求。编程语言和范式的理论知识没有触及到这些实际的问题,开发框架虽然涉及实践,却又局限在具体的方案中,不易让人获得对问题的一般理解。

软件开发实践中遇到的各个方面的议题往往缺乏系统的理论,程序员凭着各自的理解动手,或者知其然不知其所以然,或者每个人的所以然有出入甚至矛盾。例如针对接口编程就是尽量多用接口吗?事件驱动编程的本质是什么?怎么样算是应用了MVC架构?极简主义就是越简单越好吗?文档型数据库和关系型数据库的优劣各在什么地方?基于角色的存取控制系统是如何理解权限的?在主流的软件开发理念之外能否另辟蹊径?客户端和浏览器之间的竞争究竟意味着什么?对这类实践中涉及的概念和遇到的问题,如果追本溯源,多思考一些是什么、为什么和怎么做,建立起融会贯通的理解,既对实际开发有帮助,又有益于在纷繁多变的技术浪潮中看清本质、把握方向。

本书就从以上思路出发,逐个讨论软件开发实践中的重要主题。第一章辨析对象间的依赖和针对接口编程。第二章讨论事件驱动编程的方方面面。第三章分析MVC架构的思想和实现。第四章比较图形用户界面的一些相关或对立的思想和技术,并介绍极简主义潮流。第五章分析热门的文档型数据库,并和关系型数据库做对比。第六章讨论存取控制的各个环节,分析基于角色的和基于属性的存取控制的优缺点。第七章介绍非一般快的Lotus Notes程序开发。第八章探讨软件的兴衰和客户端的潮流。顺序上靠前章节的内容较一般,不会依赖其后的部分,靠后的章节有可能应用前文的知识。风格上每章力图从主题的源头和本质入手,遵循逻辑层层展开,尽量全面地遍历主题涉及的方方面面。书中代码为正在讨论的理念和问题服务,只是示意性地勾勒出核心的部分,无关和繁冗的部分被省略。

野人献曝,未免贻笑大方;愚者千虑,或有一得可鉴。

是为序。

目录

第1章  接口
1.1  使用接口编程
1.2  依赖反转原则
1.3  如何实现
1.3.1  工厂模式
1.3.2  服务定位器模式
1.3.3  依赖注入
1.4  真的实现了吗
1.4.1  依赖的传递性
1.4.2  依赖的形式
1.5  真正的实现
1.5.1  配置文件
1.5.2  配置代码
1.5.3  惯例先于配置
1.5.4  元数据
1.5.5  实现消除依赖的方法的本质
1.6  有必要针对接口编程吗
1.6.1  针对接口编程的成本
1.6.2  接口的意义
1.6.3  何时针对接口编程?
第2章  事件
2.1  控制反转
2.2  观察者模式
2.3  Java中的事件编程
2.3.1  通用的事件发布者和收听者
2.3.2  通用事件收听者的问题
2.3.3  Swing用户界面里的事件编程
2.3.4  专用事件收听者的问题
2.3.5  彻底地面向对象
2.3.6  Java 8带来的福音
2.3.7  这一切背后仍然是对象
2.4  C#中的事件编程
2.4.1  代理
2.4.2  事件
2.5  JavaScript中的事件编程
2.6  事件编程的其他细节
2.6.1  收听者的执行顺序
2.6.2  收听者是否在单独的线程执行
2.6.3  控件层次中的事件传播
第3章  MVC
3.1    输入、处理和输出
3.1.1  冯诺依曼架构
3.1.2  矩阵运算器和IPO
3.1.3  矩阵运算器和IPO的升级版
3.2    程序与用户的交互
3.2.1  三类应用程序
3.2.2  持续交互带来的变化
3.2.3  图形用户界面带来的变化
3.3  设计理念
3.3.1  关注点分离
3.3.2  模型
3.3.3  模型和视图的分离
3.3.4  控制器
3.3.5  模型视图
3.3.6  事件发布者与收听者之间的依赖
3.3.7  合作方式
3.4  桌面应用程序与移动App
3.4.1  控制器和视图在代码单元上独立
3.4.2  控制器、视图和模型之间的相互引用
3.4.3  控制器和视图合一
3.4.4  移动App
3.5  Web应用程序
3.5.1  Web应用程序简史
3.5.2  服务器端的MVC
3.5.3  前端控制器与控制器
3.5.4  视图
3.5.5  模型
3.5.6  依赖注入
3.5.7  浏览器端的MVC
3.6  类型转换、校验和数据绑定
3.7  MVC的意义
第4章  界面
4.1  以用户界面为中心 VS 以业务逻辑为中心
4.2  设计视图 VS 源代码视图
4.3  自定义控件 VS 复合控件
4.4  命令式语言 VS 声明式语言
4.5  内容与外观的分离
4.6  基于请求的框架 VS 基于组件的框架
4.7  极简主义
4.7.1  用户界面上的极简主义
4.7.2  删减的对象
4.7.3  方法和特征
4.7.4  防止过度
第5章  数据库
5.1  多值与复合属性
5.1.1  关系型数据库模式的第一和第二范式
5.1.2  范式与复合、多值属性
5.1.3  关系型数据库中的多值和复杂数据类型
5.2  数据库模式
5.3  数据建模
5.3.1  抽象的数据建模
5.3.2  针对具体数据库的建模
5.4  视图
5.4.1  索引
5.4.2  关系型数据库中的视图
5.4.3  文档型数据库中的视图
5.5  可伸缩性
5.6  可得性与BASE
5.7  编程接口
5.8  总结
第6章  权限
6.1  身份验证
6.1.1  验证类型
6.1.2  验证属性
6.1.3  知识要素验证
6.2  Web应用的验证
6.2.1  验证与会话
6.2.2  第三方身份验证
6.3  授权
6.4  基于角色的存取控制
6.4.1  用户与权限
6.4.2  群组与角色
6.4.3  权限与操作
6.4.4  实现
6.5  基于属性的存取控制
6.5.1  资源与存取方式
6.5.2  从权限到属性
第7章  异类
7.1  快速开发能有多快?
7.2  Lotus Notes是什么
7.2.1  一个工作流系统的样例
7.3  技术架构
7.3.1  数据库
7.3.2  客户端与服务器
7.4  应用程序开发
7.4.1  两种路径
7.4.2  用户界面驱动的快速开发
7.4.3  事件驱动编程
7.4.4  直接使用文档对象编程
7.4.5  权限模型
7.4.6  角色和隐藏公式
7.4.7  三类应用程序
7.4.8  多种编程语言
7.5  Lotus Notes的衰亡及其教训
7.5.1  对用户主观体验重视不够
7.5.2  快速开发的缺陷
7.5.3  嵌入式开发的缺陷
7.5.4  数据库和应用程序合一
7.5.5  创新乏力
7.6  给现有Lotus Notes客户的建议
第8章  兴衰
8.1  软件的更新和生命
8.1.1  兼容性
8.1.2  兼容性与创新
8.2  客户端的兴衰
8.2.1  客户端与服务器
8.2.2  远程过程调用和数据传输协议
8.2.3  客户端的胖瘦趋势
8.2.4  客户端与浏览器
8.2.5  浏览器与App
8.2.6  理想的客户端应用程序
8.2.7  开发人员体验 VS 用户体验
8.3  Lotus Notes的历史
8.3.1  前身
8.3.2  青少年:版本1-3
8.3.3  中年:版本4-6
8.3.4  老年:版本7-9
 

更多内容,请访问本书链接(购买一百本以上送作者签名照):

《软件开发面面谈》(京东)

《软件开发面面谈》(当当)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值