[设计模式就该这样学 基于经典框架源码和真实业务场景+全栈技能修炼 软件架构设计模式与应用框架之间的区别]

Вес товара: ~0.7 кг. Указан усредненный вес, который может отличаться от фактического. Не включен в цену, оплачивается при получении.
Описание товара
- Информация о товаре
- Фотографии

![[基本信息.jpg]](https://img.alicdn.com/imgextra/i3/2773002792/TB2U69VvY1YBuNjSszeXXablFXa_!!2773002792.jpg)
[书名:设计模式就该这样学]
[定价:118.00元]
[出版社: 电子工业出版社]
[ISBN:9787121392085]
[版次:1]
[定价:118]
[出版时间:2020-07-01]
[书名: 全栈技能修炼:使用Angular和Spring boot打造全栈应用]
[出版时间: 2019年9月]
[定价: 109.00元]
[开本: 16开]
[是否是套装: 否]
[出版社名称: 电子工业出版社]

![[内容简介.jpg]](https://img.alicdn.com/imgextra/i3/2773002792/TB2AH9Lv25TBuNjSspcXXbnGFXa_!!2773002792.jpg)
[书名:设计模式就该这样学]
[本书从软件架构设计的通用技能UML开始,重点介绍常用的类图和时序图;然后介绍软件架构设计常用的七大原则;接着结合JDK、Spring、MyBatis、Tomcat、Netty等经典框架源码对GoF的23种设计模式展开分析,并结合作者多年]&[ldquo;踩坑填坑]&[rdquo;和]&[ldquo;教学答疑]&[rdquo;经验,用深刻、全面、通俗、生动、有趣、接地气的方式结合真实业务场景分析每种设计模式,治愈]&[ldquo;设计模式选择困难症]&[rdquo;;之后介绍4种常用的新设计模式;后总结软件架构、设计模式与应用框架之间的区别。]
[如果你已经有编程经验,那么你一定要学一遍设计模式;如果你是资深工程师或者架构师,那么本书将颠覆你以前的认知;如果你觉得设计模式晦涩难懂,那么本书一定能让你醍醐灌顶;如果你看框架源码总是力不从心,那么本书就是]&[ldquo;内功心法]&[rdquo;。]
[书名: 全栈技能修炼:使用Angular和Spring boot打造全栈应用]
[本书涉及很多平台、框架和类库等,主要有前端使用的Angular,后端使用的Spring Boot框架、Spring Security安全框架,数据库涉及MongoDB、Elasticsearch和Redis。此外,还会学习函数式编程、响应式编程(RJS)、Redu等理念,Swagger、JaVers等工具及Rest、WebSocket、微服务等概念。一本书是无法深入这些技术细节的,这也不是本书的目标。希望通过本书,可以帮助读者开启一扇门,真正掌握这些让人眼花缭乱的编程语言、框架、平台、IDE等技术背后的编程思想。]

![[目录.jpg]](https://img.alicdn.com/imgextra/i2/2773002792/TB20x7uv9tYBeNjSspkXXbU8VXa_!!2773002792.jpg)
[书名:设计模式就该这样学]
[1篇 ]&[nbsp;软件设计前奏篇]
[1章 ]&[nbsp;重新认识UML2]
1.1&[nbsp;UML的定义2]
1.2&[nbsp;UML应用场景2]
1.3&[nbsp;UML基本构件简介3]
1.3.1&[nbsp;事物3]
1.3.2&[nbsp;关系5]
1.3.3&[nbsp;图6]
[2章 ]&[nbsp;设计模式常用的UML图7]
2.1&[nbsp;类图7]
2.1.1&[nbsp;继承关系8]
2.1.2&[nbsp;实现关系8]
2.1.3&[nbsp;组合关系9]
2.1.4&[nbsp;聚合关系10]
2.1.5&[nbsp;关联关系11]
2.1.6&[nbsp;依赖关系12]
2.1.7&[nbsp;类关系记忆技巧14]
2.2&[nbsp;时序图15]
2.2.1&[nbsp;时序图的作用15]
2.2.2&[nbsp;时序图组成元素16]
2.2.3&[nbsp;时序图组合片段17]
2.2.4&[nbsp;时序图画法及应用实践19]
[3章 ]&[nbsp;七大软件架构设计原则22]
3.1&[nbsp;开闭原则22]
3.1.1&[nbsp;开闭原则的定义22]
3.1.2&[nbsp;使用开闭原则解决实际问题23]
3.2&[nbsp;依赖倒置原则24]
3.2.1&[nbsp;依赖倒置原则的定义24]
3.2.2&[nbsp;使用依赖倒置原则解决实际问题25]
3.3&[nbsp;单一职责原则28]
3.3.1&[nbsp;单一职责原则的定义28]
3.3.2&[nbsp;使用单一职责原则解决实际问题28]
3.4&[nbsp;接口隔离原则31]
3.4.1&[nbsp;接口隔离原则的定义31]
3.4.2&[nbsp;使用接口隔离原则解决实际问题31]
3.5&[nbsp;迪米特法则33]
3.5.1&[nbsp;迪米特法则的定义33]
3.5.2&[nbsp;使用迪米特法则解决实际问题33]
3.6&[nbsp;里氏替换原则35]
3.6.1&[nbsp;里氏替换原则的定义35]
3.6.2&[nbsp;使用里氏替换原则解决实际问题36]
3.7&[nbsp;合成复用原则40]
3.7.1&[nbsp;合成复用原则的定义40]
3.7.2&[nbsp;使用合成复用原则解决实际问题40]
3.8&[nbsp;软件架构设计原则小结42]
[4章 ]&[nbsp;关于设计模式的那些事儿43]
4.1&[nbsp;本书与GOF的《设计模式》的关系43]
4.2&[nbsp;为什么一定要学习设计模式45]
4.2.1&[nbsp;写出优雅的代码45]
4.2.2&[nbsp;更好地重构项目47]
4.2.3&[nbsp;经典框架都在用设计模式解决问题58]
[2篇 ]&[nbsp;创建型设计模式]
[5章 ]&[nbsp;简单工厂模式60]
5.1&[nbsp;工厂模式的历史由来60]
5.2&[nbsp;简单工厂模式概述61]
5.2.1&[nbsp;简单工厂模式的定义61]
5.2.2&[nbsp;简单工厂模式的应用场景61]
5.2.3&[nbsp;简单工厂模式的UML类图61]
5.2.4&[nbsp;简单工厂模式的通用写法62]
5.3&[nbsp;使用简单工厂模式封装产品创建细节63]
5.4&[nbsp;简单工厂模式在框架源码中的应用66]
5.4.1&[nbsp;简单工厂模式在JDK源码中的应用66]
5.4.2&[nbsp;简单工厂模式在Logback源码中的应用67]
5.5&[nbsp;简单工厂模式扩展67]
5.5.1&[nbsp;简单工厂模式的优点67]
5.5.2&[nbsp;简单工厂模式的缺点67]
[6章 ]&[nbsp;工厂方法模式68]
6.1&[nbsp;工厂方法模式概述68]
6.1.1&[nbsp;工厂方法模式的定义68]
6.1.2&[nbsp;工厂方法模式的应用场景69]
6.1.3&[nbsp;工厂方法模式的UML类图69]
6.1.4&[nbsp;工厂方法模式的通用写法70]
6.2&[nbsp;使用工厂方法模式实现产品扩展71]
6.3&[nbsp;工厂方法模式在LOGBACK源码中的应用72]
6.4&[nbsp;工厂方法模式扩展73]
6.4.1&[nbsp;工厂方法模式的优点73]
6.4.2&[nbsp;工厂方法模式的缺点73]
[7章 ]&[nbsp;抽象工厂模式74]
7.1&[nbsp;抽象工厂模式概述74]
7.1.1&[nbsp;抽象工厂模式的定义74]
7.1.2&[nbsp;关于产品等级结构和产品族75]
7.1.3&[nbsp;抽象工厂模式的应用场景76]
7.1.4&[nbsp;抽象工厂模式的UML类图76]
7.1.5&[nbsp;抽象工厂模式的通用写法76]
7.2&[nbsp;使用抽象工厂模式解决实际问题78]
7.2.1&[nbsp;使用抽象工厂模式支持产品扩展78]
7.2.2&[nbsp;使用抽象工厂模式重构数据库连接池81]
7.3&[nbsp;抽象工厂模式在SPRING源码中的应用88]
7.4&[nbsp;抽象工厂模式扩展89]
7.4.1&[nbsp;抽象工厂模式的优点89]
7.4.2&[nbsp;抽象工厂模式的缺点90]
[8章 ]&[nbsp;单例模式91]
8.1&[nbsp;单例模式概述91]
8.1.1&[nbsp;单例模式的定义91]
8.1.2&[nbsp;单例模式的应用场景91]
8.1.3&[nbsp;单例模式的UML类图92]
8.1.4&[nbsp;单例模式的通用写法92]
8.2&[nbsp;使用单例模式解决实际问题93]
8.2.1&[nbsp;饿汉式单例写法的弊端93]
8.2.2&[nbsp;还原线程破坏单例的事故现场93]
8.2.3&[nbsp;双重检查锁单例写法闪亮登场97]
8.2.4&[nbsp;看似的静态内部类单例写法100]
8.2.5&[nbsp;还原反破坏单例模式的事故现场101]
8.2.6&[nbsp;更加优雅的枚举式单例写法问世103]
8.2.7&[nbsp;还原反序列化破坏单例模式的事故现场108]
8.2.8&[nbsp;使用容器式单例写法解决大规模生产单例的问题114]
[书名: 全栈技能修炼:使用Angular和Spring boot打造全栈应用]
[1章 技术的选型和环境搭建 1]
[1.1 技术选型 1]
[1.1.1 前端框架选型 2]
[1.1.2 后端框架选型 3]
[1.1.3 数据库选型 3]
[1.2 环境搭建 5]
[1.2.1 基础开发环境安装 5]
[1.2.2 IDE 的选择 7]
[1.2.3 字体的选择 8]
[1.2.4 定义通用的代码格式 9]
[1.3 工程项目的结构 10]
[1.3.1 前端项目 10]
[1.3.2 后端项目 13]
[1.3.3 整体项目工程的文件结构 14]
[2章 使用Angular快速构造前端原型 17]
[2.1 Angular 基础概念 17]
[2.1.1 安装 Angular CLI 17]
[2.1.2 依赖性注入 22]
[2.1.3 组件 27]
[2.1.4 指令 28]
[2.1.5 管道 30]
[2.1.6 模块 31]
[2.1.7 模板驱动型表单 33]
[2.1.8 响应式表单 46]
[2.2 Angular Material 介绍 55]
[2.2.1 组件类别 55]
[2.2.2 布局控件:Sidenav 57]
[2.2.3 Fle 布局和 Angular Fle-layout 60]
[2.2.4 封装 Header/Footer/Sidebar 62]
[2.3 添加主题支持 78]
[2.3.1 Material Design 中对于主题的约束 79]
[2.3.2 主题的明与暗 79]
[2.3.3 Angular Material 中的主题 80]
[2.4 容器化 Angular 应用 83]
[2.4.1 什么是容器 83]
[2.4.2 安装 Docker 84]
[2.4.3 镜像仓库加速 85]
[2.4.4 创建 Angular 的 Docker 镜像 85]
[2.4.5 启动容器 87]
[2.4.6 使用 docker-compose 组织复杂的环境配置 88]
[2.4.7 使用 .dockerigre 文件 91]
[3章 何谓后端 92]
[3.1 创建一个 Spring Boot 工程 93]
[3.1.1 通过 Gradle 创建 93]
[3.1.2 通过 Maven 创建 99]
[3.1.3 通过 IDE 创建 103]
[3.1.4 工程项目的组织 105]
[3.2 API 的构建可以如此简单 109]
[3.2.1 API 工程结构 109]
[3.2.2 领域对象 111]
[3.2.3 构造 Controller 112]
[3.2.4 启动服务 113]
[3.2.5 测试 API 115]
[3.3 MongoDB 支撑的 API 116]
[3.3.1 什么是 SQL 116]
[3.3.2 MongoDB 的集成 119]
3.3.3 HATEOAS 124
3.3.4&[ldquo;魔法]&[rdquo;的背后 129]
[3.3.5 让后端也能热更新 132]
[3.4 容器化后端 135]
[3.4.1 手动创建镜像 135]
[3.4.2 使用 Gradle 自动化 Docker 任务 137]
[3.4.3 使用 docker-compose 组合服务 141]
[3.4.4 IDEA 中的 Gradle 支持 142]
[3.4.5 在容器中调试 143]
[4章 登录鉴权功能的构建 145]
[4.1 模块化和组件化 145]
[4.1.1 登录的领域模型构建 145]
[4.1.2 前端页面设计 147]
[4.2 响应式编程初探 166]
[4.2.1 不同的视角 166]
[4.2.2 实现一个计数器 169]
[4.2.3 为什么要使用 R 177]
[4.2.4 Observable 的性质 178]
[4.2.5 RJS 的调试 180]
[4.3 前端服务层 184]
[4.3.1 构建]&[ldquo;伪]&[rdquo;服务 184]
[4.3.2 构建]&[ldquo;聪明组件]” 188
[4.3.3 路由处理 192]
[4.4 完成忘记密码前端设计 194]
[4.4.1 使用 RJS 打造短信验证码控件 194]
[4.4.2 忘记密码向导]&[ldquo;笨组件]” 199
[4.4.3 忘记密码的]&[ldquo;聪明组件]” 203
[5章 构建后端API 205]
[5.1 HyperMedia API 与传统 API 205]
[5.1.1 领域对象 205]
[5.1.2 API的可见控制 211]
[5.1.3 传统的 API 实现模式 218]
[5.2 Spring Data 中的查询 221]
[5.2.1 基础概念]——Repository 221
[5.2.2 查询方式 223]
[5.2.3 复杂类型查询 226]
[5.2.4 自定义查询 228]
[5.2.5 自定义 Repository 229]
[5.3 Controller 的构建 230]
[5.3.1 改造 TaskRepo 和 UserRepo 230]
[5.3.2 实现 Controller 231]
[5.3.3 登录 234]
[5.3.4 注册 235]
[5.3.5 忘记密码**步:验证手机 236]
[5.3.6 忘记密码二步:重置密码 244]
[5.3.7 API 的异常处理 246]
[5.4 构建安全的 API 接口 255]
[5.4.1 为什么要保护 API 256]
[5.4.2 什么是JWT 256]
[5.4.3 JWT的生成和解析 259]
[5.4.4 权限的设计 260]
[5.4.5 使用 Spring Security 规划角色安全 261]
[5.4.6 在 Spring Boot 中启用 Spring Security 265]
[5.4.7 改造用户对象 266]
[5.4.8 构建 JWT token 工具类 268]
[5.4.9 如何检查任何请求的授权信息 272]
[5.4.10 得到用户信息 275]
[5.4.11 配置 Spring Security 277]
[5.4.12 使用 JWT 进行 API 访问 292]
[5.5 跨域和 API 文档 305]
[5.5.1 跨域解决方案]——CORS 305
[5.5.2 API 文档 309]
[6章 前端和API的配合 322]
[6.1 响应式的 HTTP API 处理 322]
[6.1.1 Angular 中的 HTTP 服务 322]
[6.1.2 Angular 的开发环境配置 323]
[6.1.3 在前端服务中使用 HttpClient 327]
[6.1.4 更改注册表单控件 331]
[6.2 RJs进阶 332]
[6.2.1 改造登录表单 332]
[6.2.2 RJs的高阶作符 333]
[6.2.3 合并作符 339]
[6.3 HTTP 拦截 342]
[6.3.1 实现一个简单的 HttpInterceptor 342]
[6.3.2 鉴权HttpInterceptor 343]
[6.3.3 一个日志拦截器 345]
[6.4 Angular 路由 346]
[6.4.1 基准锚链接 346]
[6.4.2 Router 模块的简介 347]
[6.4.3 获取父路由的参数 354]
[6.4.4 获得前一个路由 354]
6.4.5 Activated Route 354
[6.5 安全守卫 355]
[6.5.1 激活守卫 356]
[6.5.2 激活子路由守卫 357]
[6.5.3 加载守卫 358]
[6.5.4 出守卫 359]
[6.5.5 数据预获取守卫 359]
[7章 后端不只是API 361]
[7.1 缓存 361]
[7.1.1 配置 Cache 362]
[7.1.2 常用的缓存注解 364]
[7.1.3 测试缓存是否生效 366]
[7.2 Redis 作为缓存框架 368]
[7.2.1 Redis 的安装配置 369]
[7.2.2 在 Spring Boot 中集成 Redis 370]
7.2.3 Redisson 373
[7.3 使用 ElasticSearch 提升搜索性能 375]
[7.3.1 配置 375]
[7.3.2 构建用户查询 API 379]
[7.4 Spring Boot Actuator 和数据审计 390]
[7.4.1 初窥审计事件 390]
[7.4.2 实现应用的数据审计 394]
[7.4.3 JaVers 和 Spring Boot 集成 396]
[7.5 WebSocket 实时通信服务 401]
[7.5.1 HTTP 和 WebSocket 的区别和联系 402]
[7.5.2 何时使用 WebSocket 403]
7.5.3 STOMP 403
[7.5.4 WebSocket 配置 404]
[7.5.5 WebScoket 安全 406]
[7.5.6 建立一个实时消息 Controller 409]
[7.5.7 测试 WebSocket 409]
[7.6 Spring Boot 的自动化测试 411]
[8章 前端的工程化 422]
[8.1 使用 Redu 管理状态 423]
[8.1.1 何时需要使用 Redu 423]
[8.1.2 Redu 的核心概念 424]
[8.1.3 在 Angular 中使用 Redu 429]
8.1.4 Selector—&[mdash;状态选择器 434]
[8.2 使用 Effects管理的副作用 437]
[8.3 使用 @ngr/entity 提升生产效率 441]
[8.4 服务端渲染 446]
[8.4.1 Angular Universal 的工作机理 447]
[8.4.2 安装依赖 447]
[8.4.3 添加服务器端渲染模块 448]
[8.4.4 使用 de.js Epress 构建服务器 450]
[8.4.5 服务器端渲染中出现重复请求的处理 453]
[9章 Spring Cloud打造微服务 455]
[9.1 微服务的体系架构 455]
[9.1.1 服务即组件 456]
[9.1.2 微服务架构下的组织机构变化 456]
[9.1.3 产品化服务 458]
[9.1.4 持续集成和持续发布 458]
[9.1.5 监控和报警 458]
[9.1.6 Spring Cloud 项目依赖 459]
[9.2 配置服务和发现服务 461]
[9.2.1 配置中心是什么 461]
[9.2.2 发现服务 465]
[9.3 监控服务和路由服务 472]
9.3.1 Spring Boot Admin 473
[9.3.2 路由服务 478]
[9.4 微服务的远程调用 485]
9.4.1 Feign Client 485
[9.4.2 负载均衡 490]
[附录A 常见云服务使用问题汇总 492]
............





