logo
分类于: 编程语言 计算机基础 云计算&大数据 职场办公

简介

软件架构:Python语言实现

软件架构:Python语言实现 6.8分

资源最后更新于 2020-03-29 01:25:00

作者:〔印度〕阿南德·巴拉钱德拉·皮莱

译者:李必信

出版社:出版社机械工业出版社

出版日期:2018-02

ISBN:9787111590941

文件格式: pdf

标签: 计算机 编程 软件开发 工具书 Python

简介· · · · · ·

软件架构,可以说是为特定的应用软件创建一个蓝图设计。软件架构中存在两大挑战:首先,软件架构与需求必须保持一致,对尚未发现的需求或者发生演化的需求都是如此;其次,尽管常常发生架构实现的变更,但软件架构与其对应的架构实现必须保持一致。本书包含很多示例和用例,通过这种直观的方法来帮助你获取成为一名成功的软件架构师所需的一切。本书将帮助你了解Python的来龙去脉,以便可以用Python来构建和设计高度可扩展的、健壮的、简洁的、性能强大的应用程序。阿南德·巴拉钱德拉·皮莱,一名工程技术专家,在软件企业有18年以上的工作经历,在产品工程、软件设计、架构设计和相关研究方面具有非常丰富的经验。他曾获得印度理工学院机械工程专业的学士学位。曾在Yahoo!、McAfee和Infosys等公司任职,担任产品开发团队的首席工程师。他的主要兴趣在于软件性能工程、高可扩展性架构、安全和开源社区等方面。他也经常在Startups工作,担任首席技术专家或顾问。他还是班加罗尔Python用户联盟的奠基人和Python软件协会(PSF)的会士。Anand现在是Yegii公司的首席架构师。

想要: 点击会收藏到你的 我的收藏,可以在这里查看

已收: 表示已经收藏

Tips: 注册一个用户 可以通过用户中心得到电子书更新的通知哦

目录

  1. 译者序
  2. 关于作者
  3. 关于评审人
  4. 前言
  5. 第1章 软件架构原理
  6. 1.1 软件架构定义
  7. 1.1.1 软件架构与设计
  8. 1.1.2 软件架构相关的几个方面
  9. 1.2 软件架构的特征
  10. 1.2.1 用架构来定义一种结构
  11. 1.2.2 由架构来挑选一组核心元素
  12. 1.2.3 由架构来捕获早期的设计决策
  13. 1.2.4 由架构来管理利益相关者的需求
  14. 1.2.5 架构影响着组织结构
  15. 1.2.6 架构受到环境的影响
  16. 1.2.7 架构是对系统的文档化
  17. 1.2.8 架构通常会遵循某个模式
  18. 1.3 软件架构的重要性
  19. 1.4 系统架构与企业架构
  20. 1.5 架构的质量属性
  21. 1.5.1 可修改性
  22. 1.5.2 可测试性
  23. 1.5.3 可扩展性
  24. 1.5.4 性能
  25. 1.5.5 可用性
  26. 1.5.6 安全性
  27. 1.5.7 可部署性
  28. 1.6 本章小结
  29. 第2章 编写可修改可读的代码
  30. 2.1 什么是可修改性
  31. 2.2 与可修改性相关的几个方面
  32. 2.3 理解可读性
  33. 2.3.1 Python和可读性
  34. 2.3.2 可读性–反模式
  35. 2.4 增强可读性的各种技术
  36. 2.4.1 文档化代码
  37. 2.4.2 遵守编码和风格规范
  38. 2.4.3 审查和重构代码
  39. 2.4.4 注释代码
  40. 2.5 可修改性的基础——内聚和耦合
  41. 2.5.1 测量内聚性和耦合性
  42. 2.5.2 字符串和文本处理
  43. 2.6 探索提高可修改性的策略
  44. 2.6.1 提供显式接口
  45. 2.6.2 减少双向依赖
  46. 2.6.3 抽象出公共服务
  47. 2.6.4 使用继承技术
  48. 2.6.5 使用延迟绑定技术
  49. 2.7 度量——静态分析工具
  50. 2.7.1 什么是代码坏味道
  51. 2.7.2 圈复杂度——McCabe度量
  52. 2.7.3 度量结果测试
  53. 2.7.4 运行静态检查器
  54. 2.8 重构代码
  55. 2.8.1 降低复杂度
  56. 2.8.2 改善代码坏味道
  57. 2.8.3 改善风格上和编码上的问题
  58. 2.9 本章小结
  59. 第3章 可测试性——编写可测试的代码
  60. 3.1 理解可测试性
  61. 3.1.1 软件可测试性及相关属性
  62. 3.1.2 架构级的方方面面
  63. 3.1.3 策略
  64. 3.2 白盒测试原理
  65. 3.2.1 单元测试
  66. 3.2.2 操作中的单元测试
  67. 3.2.3 单元测试模块nose2
  68. 3.2.4 用py.test进行测试
  69. 3.2.5 代码覆盖
  70. 3.2.6 仿制一些东西
  71. 3.2.7 文档中的内联测试——doctest
  72. 3.2.8 集成测试
  73. 3.2.9 测试自动化
  74. 3.3 测试驱动开发
  75. 3.4 有回文的TDD
  76. 3.5 本章小结
  77. 第4章 好的性能就是回报
  78. 4.1 什么是性能
  79. 4.2 软件性能工程
  80. 4.3 性能测试和度量工具
  81. 4.4 性能复杂度
  82. 4.5 度量性能
  83. 4.5.1 使用上下文管理器度量时间
  84. 4.5.2 使用timeit模块来计时代码
  85. 4.5.3 使用timeit度量代码的性能
  86. 4.5.4 揭示时间复杂度——各种图
  87. 4.5.5 使用timeit度量CPU时间
  88. 4.6 剖析
  89. 4.6.1 确定性剖析
  90. 4.6.2 使用cProfile和profile进行剖析
  91. 4.6.3 收集和报告统计数据
  92. 4.6.4 第三方剖析器
  93. 4.7 其他工具
  94. 4.7.1 objgraph
  95. 4.7.2 pympler
  96. 4.8 程序设计性能——数据结构
  97. 4.8.1 可变容器——链表、字典和集合
  98. 4.8.2 不可变容器——元组
  99. 4.8.3 高性能容器——集合模块
  100. 4.8.4 概率数据结构——布隆过滤器
  101. 4.9 本章小结
  102. 第5章 开发可扩展的应用
  103. 5.1 可扩展性和性能
  104. 5.2 并发性
  105. 5.2.1 并发性与并行性
  106. 5.2.2 Python中的并发性——多线程机制
  107. 5.3 缩略图产生器
  108. 5.3.1 缩略图产生器——生产者/消费者架构
  109. 5.3.2 缩略图产生器——使用锁的资源约束
  110. 5.3.3 缩略图产生器——使用信号量的资源约束
  111. 5.3.4 资源约束——信号量和锁比较
  112. 5.3.5 缩略图产生器——使用条件的URL速率控制器
  113. 5.4 多线程机制——Python和GIL
  114. 5.4.1 Python中的并发性——多进程机制
  115. 5.4.2 质数检查器
  116. 5.4.3 排序磁盘文件
  117. 5.5 多线程与多进程比较
  118. 5.6 先入为主的与合作的多任务处理
  119. 5.7 Python中的asyncio模块
  120. 5.8 等待future对象——async和await
  121. 5.9 concurrent.future——高级并发处理
  122. 5.9.1 磁盘缩略图产生器
  123. 5.9.2 并发选项——如何选择?
  124. 5.10 并行处理库
  125. 5.10.1 joblib
  126. 5.10.2 PyMP
  127. 5.10.3 fractals——Mandelbrot集
  128. 5.11 Web扩展
  129. 5.11.1 扩展工作流——消息队列和任务队列
  130. 5.11.2 Celery——一种分布式任务队列
  131. 5.11.3 在Web上使用Python服务——WSGI
  132. 5.12 可扩展架构
  133. 5.12.1 垂直可扩展架构
  134. 5.12.2 水平扩展架构
  135. 5.13 本章小结
  136. 第6章 安全性——编写安全代码
  137. 6.1 信息安全架构
  138. 6.2 安全编码
  139. 6.3 常见的安全漏洞
  140. 6.4 Python安全吗?
  141. 6.4.1 读取输入
  142. 6.4.2 任意输入求值
  143. 6.4.3 溢出错误
  144. 6.4.4 序列化对象
  145. 6.5 Web应用的安全问题
  146. 6.5.1 服务器端模板注入
  147. 6.5.2 服务器端模板注入——回避
  148. 6.5.3 服务拒绝
  149. 6.5.4 跨站脚本攻击
  150. 6.5.5 回避——DoS和XSS
  151. 6.6 Python中的安全策略
  152. 6.7 安全编码策略
  153. 6.8 本章小结
  154. 第7章 Python设计模式
  155. 7.1 设计模式——元素
  156. 7.2 设计模式分类
  157. 7.2.1 可插拔的散列算法
  158. 7.2.2 可插拔的散列算法总结
  159. 7.3 Python模式——创建模式
  160. 7.3.1 单例模式
  161. 7.3.2 工厂模式
  162. 7.3.3 原型模式
  163. 7.3.4 建造者模式
  164. 7.4 Python模式——结构化模式
  165. 7.4.1 适配器模式
  166. 7.4.2 外观模式
  167. 7.4.3 代理模式
  168. 7.5 Python模式——行为模式
  169. 7.5.1 迭代器模式
  170. 7.5.2 观察者模式
  171. 7.5.3 状态模式
  172. 7.6 本章小结
  173. 第8章 Python架构模式
  174. 8.1 MVC概述
  175. 8.1.1 模型模板视图——Django
  176. 8.1.2 Django管理——自动的以模型为中心的视图
  177. 8.1.3 灵活的微框架——Flask
  178. 8.2 事件驱动编程
  179. 8.2.1 采用I/O多路复用select模块的聊天服务器和客户端
  180. 8.2.2 事件驱动与并发编程
  181. 8.2.3 Twisted
  182. 8.2.4 Eventlet
  183. 8.2.5 Greenlet和Gevent
  184. 8.3 微服务架构
  185. 8.3.1 Python中的微服务框架
  186. 8.3.2 微服务实例——餐馆预订
  187. 8.3.3 微服务的优点
  188. 8.4 管道和过滤器架构
  189. 8.5 本章小结
  190. 第9章 部署Python应用程序
  191. 9.1 可部署性
  192. 9.1.1 影响可部署性的因素
  193. 9.1.2 软件部署架构的层次
  194. 9.2 Python软件部署
  195. 9.2.1 给Python代码打包
  196. 9.2.2 使用Fabric进行远程部署
  197. 9.2.3 使用Ansible进行远程部署
  198. 9.2.4 使用Supervisor管理远程守护进程
  199. 9.3 部署——模式和最佳实践
  200. 9.4 本章小结
  201. 第10章 各种用于调试的技术
  202. 10.1 最大子阵列问题
  203. 10.1.1 “print”的力量
  204. 10.1.2 分析和重写
  205. 10.1.3 代码计时和代码优化
  206. 10.2 简单的调试技巧和技术
  207. 10.2.1 词搜索器程序
  208. 10.2.2 词搜索器程序——调试步骤1
  209. 10.2.3 词搜索器程序——调试步骤2
  210. 10.2.4 词搜索器程序——最终代码
  211. 10.2.5 跳过代码块
  212. 10.2.6 停止执行
  213. 10.2.7 使用wrapper来控制外部依赖
  214. 10.2.8 用函数的返回值或数据来替换函数(模拟)
  215. 10.3 作为一种调试技术的日志记录
  216. 10.3.1 简单的应用程序日志记录
  217. 10.3.2 高级日志记录——日志记录器对象
  218. 10.4 调试工具——使用各种调试器
  219. 10.4.1 一个使用pdb的调试会话
  220. 10.4.2 pdb——两个相似的工具
  221. 10.5 高级调试——跟踪
  222. 10.5.1 trace模块
  223. 10.5.2 lptrace程序
  224. 10.5.3 使用strace的系统调用跟踪
  225. 10.6 本章小结