Live软件开发面面谈
批量上传,套装书可能不全,下单前咨询在线客服!有特殊要求,下单前请咨询客服!
¥
41.43
7.0折
¥
59
全新
库存6件
作者潘俊
出版社清华大学出版社
ISBN9787302501565
出版时间2018-07
装帧平装
开本16开
定价59元
货号25321932
上书时间2024-11-04
商品详情
- 品相描述:全新
- 商品描述
-
前言
自序
开发软件离不开编写代码,但仅仅具备编程的技能也还不足以胜任开发软件的工作。这就好比一个人会烧砖、砌墙,但要造一间可供人居住的屋子,他还得了解屋子的结构、不同房间的功能、水电管线的敷设、墙面地面的装修等方面的知识。对软件开发人员来说,编程领域的知识往往是受关注的,它们确实也可以分为多个层次: 编程语言本身的知识(如C、Java),编程范式和思想,面向对象编程和函数式编程,开发框架的知识(如Spring、AngularJS),等等。一个新人若想以软件开发为职业,大概需要阅读的范围就会集中在以上方面。然而,当他开始项目开发时,就会发现还有许多实际的问题需要考虑和解决,软件开发并不像编程教材上的代码样例和习题那样专注于某个算法或思想。不妨考虑一个典型的业务系统,它是一个图形用户界面的程序,因而需要采用某种GUI框架开发界面; 用户在界面上的操作通过事件机制调用相应的处理程序; 用户界面、事件处理程序和体现需求的业务逻辑必须组成某种合理的结构,否则系统会随着功能的增加迅速变得难以理解和维护; 系统越大,组件越多,越需要适当地保持它们之间的依赖关系,合理地应用接口是关键; 这个业务系统显然比所有数据都来自即时输入的计算器复杂,许多信息要往返于数据库; 后,这是一个多用户使用的系统,必须适应不同用户的权限需求。编程语言和范式的理论知识没有触及这些实际的问题,开发框架虽然涉及实践,却又局限在具体的方案中,不易让人获得对知识的一般理解。软件开发实践中遇到的各个方面的问题往往缺乏系统的理论,程序员凭着各自的理解动手,或者知其然而不知其所以然,或者每个人的所以然有出入甚至矛盾。例如,针对接口编程就是尽量多用接口吗?事件驱动编程的本质是什么?怎么样算是应用了MVC架构?极简主义就是越简单越好吗?文档型数据库和关系型数据库的优劣各体现在什么地方?基于角色的存取控制系统是如何理解权限的?在主流的软件开发理念之外能否另辟蹊径?客户端和浏览器之间的竞争究竟意味着什么?对这类实践中涉及的概念和遇到的问题,如果追根溯源,多思考一些是什么、为什么和怎么做,达到融会贯通的理解,既对实际开发有帮助,又有益于在纷繁多变的技术浪潮中看清技术的本质、把握解决问题的方向。本书从以上思路出发,逐个讨论软件开发实践中的重要主题。第1章辨析对象间的依赖和针对接口编程。第2章讨论事件驱动编程的方方面面。第3章分析MVC架构的思想和实现。第4章比较图形用户界面的一些相关或对立的思想和技术,并介绍极简主义潮流。第5章分析热门的文档型数据库,并和关系型数据库做对比。第6章讨论存取控制的各个环节,分析基于角色的和基于属性的存取控制的优缺点。第7章介绍快速的Lotus Notes程序开发。第8章探讨软件的兴衰和客户端的潮流。顺序上靠前的章节内容具有一般性,不会依赖其后的部分,靠后的章节有可能应用前文的知识。编写风格上每章力图从主题的源头和本质入手,遵循逻辑层层展开,尽量全面地遍历主题涉及的方方面面。书中代码为正在讨论的理念和问题服务,只是示意性地勾勒出核心的部分,无关和繁冗的部分被省略。野人献曝,未免贻笑大方; 愚者千虑,或有一得可鉴。是为序。
作者2018年5月
导语摘要
现实的软件开发会遇到许多具体的问题,例如,如何消除依赖?怎样进行事件驱动编程?如何在迥异的环境中实现MVC架构?怎样在不同的Web开发框架之间选择?文档型数据库与关系型数据库相比有哪些优缺点?如何构建合适的存取控制?对这些问题,简单的答案、现成的选择、枯燥的代码很多,但是从问题的源头和本质出发,深入全面的分析却很少。本书就软件开发中带有普遍性的重要方面,内容由浅入深地逐渐展开,力图使读者对软件开发实践产生由点及面、融会贯通的理解。
目录
目录
第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.3Java中的事件编程
2.3.1通用的事件发布者和收听者
2.3.2通用事件收听者的问题
2.3.3Swing用户界面里的事件编程
2.3.4专用事件收听者的问题
2.3.5彻底地面向对象
2.3.6Java 8带来的福音
2.3.7这一切背后仍然是对象
2.4C#中的事件编程
2.4.1代理
2.4.2事件
2.5JavaScript中的事件编程
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.5Web应用程序
3.5.1Web应用程序简史
3.5.2服务器端的MVC
3.5.3前端控制器与控制器
3.5.4视图
3.5.5模型
3.5.6依赖注入
3.5.7浏览器端的MVC
3.6类型转换、校验和数据绑定
3.7MVC的意义
第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.2Web应用的验证
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.2Lotus Notes是什么
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.5Lotus 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.3Lotus Notes的历史
8.3.1前身
8.3.2青少年: 版本1~3
8.3.3中年: 版本4~6
8.3.4老年: 版本7~9
参考文献
内容摘要
现实的软件开发会遇到许多具体的问题,例如,如何消除依赖?怎样进行事件驱动编程?如何在迥异的环境中实现MVC架构?怎样在不同的Web开发框架之间选择?文档型数据库与关系型数据库相比有哪些优缺点?如何构建合适的存取控制?对这些问题,简单的答案、现成的选择、枯燥的代码很多,但是从问题的源头和本质出发,深入全面的分析却很少。本书就软件开发中带有普遍性的重要方面,内容由浅入深地逐渐展开,力图使读者对软件开发实践产生由点及面、融会贯通的理解。
主编推荐
《Live软件开发面面谈》为一线软件开发人员对实践中常见易混乱的概念和难解问题的总结和解惑,例如针对接口编程就是尽量多用接口吗?事件驱动编程的本质是什么?怎样算是应用了MVC架构?极简主义就是越简单越好吗?文档型数据库和关系型数据库的优劣各在什么地方?在主流的软件开发理念之外能否另辟蹊径?客户端和浏览器之间的竞争究竟意味着什么?有助于读者深入思考、追本溯源、融会贯通,既对实际开发有帮助,又有益于在纷繁多变的技术浪潮中看清本质、把握方向,并从软件开发行业快速跳动的脉搏中读出一些共性和规律。
精彩内容
第5章数据库数据库是为了存储和查询大量现实的或虚拟的数据而建立的软件系统。为此首先要将形形色色的数据对象抽象成统一的模型。使用广泛的是实体关系(EntityRelationship)模型,实体对应的就是日常所说的物体、对象,关系则刻画它们之间的联系【注: 表达和理解这类基本的概念,适宜的方式是举例和诉诸直觉,而很难以分析的语言用其他概念来定义,不过我相信读者朋友对这些基本概念都很熟悉,无须赘述】。数据库必须以某种形式表达实体和关系,并实现对其的存储和查询。选用不同的形式和相应的理念,就构成数据库不同的模型。长期以来,关系型数据库以其成熟的理论和实现、诸多优良的特性,几乎是数据库的代名词。然而从20世纪末开始,NoSQL成了数据库领域的热词。这对关系型数据库一统江山的局势构成挑战者的大家族,八仙过海,各显神通。按数据模型,主要可以分为以下几种: (1) 文档型——MongoDB、Apache CouchDB、Couchbase、Lotus Notes。(2) 宽列型——Cassandra、HBase、BigTable。(3) 键值型——Redis、Couchbase 【注: Couchbase的设计同时包含文档和键值】、MemcacheDB。(4) 图型——MarkLogic、Neo4J。以上列举当然没有穷尽NoSQL数据库,之所以选择它们,或是因为市场占有率较高,或是因为出自Google、Facebook这样的互联网巨头。这其中成功的是文档型数据库MongoDB,根据DBEngines按照数据库流行程度的排名,MongoDB自2014年来就稳居前五名(2017年,又攀升到了第四名),而其他四名都是历史悠久的关系型数据库——Oracle、MySQL、Microsoft SQL Server和PostgreSQL。MongoDB成功进入被关系型数据库垄断的阵营,在占有率上被它们远远甩在后面的其他竞争者中,若只比较NoSQL,另两种文档型数据库Apache CouchDB和Couchbase也名列前茅。随着这股潮流出现的便是一系列关于文档型数据库的问题: 文档型数据库有何优点?它和关系型数据库有哪些差别?这些差别会怎样影响到使用它们的应用程序?关系型数据库会式
— 没有更多了 —
以下为对购买帮助不大的评价