下载频道  >  haitang357的资源
  • Delphi 6企业级解决方案及应用剖析

    第一部分 Delphi 6与企业级应用开发 第1章 用Delphi 6构建企业级应用 1 1.1 企业和企业级应用 1 1.2 企业级应用体系结构 3 1.2.1 表现层 4 1.2.2 业务层 6 1.2.3 数据层 7 1.2.4 三层结构的优势 8 1.3 企业级应用体系构建思想的发展 9 1.4 选择Delphi 6作为企业级开发的利器 15 1.4.1 Delphi 6适用对象和所能实现的 开发目标 18 1.4.2 用Delphi 6实现企业级多层应用 体系结构 19 第2章 企业级应用开发方略 22 2.1 企业级开发概述 22 2.1.1 企业级开发的多角度视图 22 2.1.2 信息系统的构成和参与者 24 2.1.3 系统开发生命周期 25 2.2 CMM与软件开发过程 26 2.2.1 与CMM有关的概念 27 2.2.2 CMM模型 28 2.2.3 CMM对软件过程的改进 32 2.3 开发组织管理 33 2.3.1 人员组织 33 2.3.2 项目管理 35 2.3.3 文档管理 39 2.4 需求和系统分析 42 2.4.1 需求分析 42 2.4.2 系统分析的方法 44 2.4.3 系统的信息分析和功能分析 46 2.4.4 系统的结构分析 49 2.5 分布式应用系统设计方法 53 2.5.1 分布式结构实现模型 53 2.5.2 设计目标和约束分析 55 2.5.3 设计分布式应用程序 58 2.6 组件模型和基于组件的开发 61 2.6.1 组件的概念 61 2.6.2 组件模型 62 2.6.3 基于组件的开发 64 2.6.4 组件标准 65 2.7 面向对象的开发方法 67 2.7.1 面向对象技术的背景及特点 68 2.7.2 面向对象程序设计与面向对象数据库 69 2.7.3 面向对象的系统分析与设计 70 2.8 质量管理和系统测试 73 2.8.1 软件的质量 73 2.8.2 质量管理 76 2.8.3 系统测试 78 第二部分 Delphi 6企业级应用开发技术 第3章 VCL和编程基本组件 81 3.1 Object类 81 3.2 VCL的层次结构 82 3.2.1 组件 84 3.2.2 Windows自己的组件 85 3.2.3 对象 85 3.3 VCL的属性、方法和事件 86 3.3.1 通用的VCL属性 86 3.3.2 通用的VCL方法 87 3.3.3 通用的 VCL事件 88 3.4 按钮型组件 89 3.4.1 TButton 89 3.4.2 TBitBtn 90 3.4.3 TSpeedButton 91 3.5 编辑型组件 92 3.5.1 Tlabel、TstaticText和TLabeledEdit 93 3.5.2 TEdit、TMaskEdit和TSpinEdit 94 3.5.3 Tmemo和TRichEdit 97 3.6 选择型组件 99 3.6.1 TRadioButton 和TRadioGroup 99 3.6.2 TcheckBox和TCheckListBox 101 3.6.3 TComboBox 102 3.6.4 TListBox 105 3.6.5 TComboBoxEx 109 3.6.6 TColorBox 111 3.7 调节型组件 111 3.7.1 TScrollBar 111 3.7.2 TSplitter 113 3.7.3 TTrackBar 115 3.7.4 TUpDown 115 3.8 容器型组件 117 3.8.1 TGroupBox 117 3.8.2 TScrollBox 117 3.8.3 TPanel 118 3.8.4 TPageControl 119 3.8.5 TFrame 122 3.9 显示型组件 126 3.9.1 TDrawGrid 126 3.9.2 TStringGrid 128 3.9.3 TTreeView 130 3.9.4 TListView 134 3.9.5 TValueListEditor 141 第4章 用户界面设计技术 145 4.1 用户交互界面设计概述 145 4.1.1 常用控件的设计 145 4.1.2 窗体和提示框的设计 147 4.2 菜单设计 148 4.2.1 TMainMenu 149 4.2.2 TPopupMenu 149 4.2.3 TMenuItem 151 4.2.4 Menu Designer 154 4.2.5 创建可移植菜单 156 4.2.6 动态菜单 160 4.2.7 宿主绘制菜单 164 4.2.8 菜单的融合 167 4.2.9 控制菜单设计 169 4.3 对话框 172 4.3.1 模式对话框与非模式对话框 172 4.3.2 公用对话框组件 176 4.3.3 标准对话框 189 4.4 快捷工具设计 194 4.4.1 工具栏设计 194 4.4.2 状态栏设计 203 4.4.3 系统托盘程序 206 4.5 Action及Action的统一管理 209 4.5.1 TAction 210 4.5.2 TActionList 211 4.5.3 TActionManager 212 4.5.4 创建Action Band 215 第5章 字符、文件处理和键盘、鼠标 编程 219 5.1 字符和文本的处理 219 5.1.1 字符和字符串相关类型 219 5.1.2 字符串相关方法 220 5.1.3 字符串列表 228 5.2 文件操作 230 5.2.1 文件命令 230 5.2.2 文本文件 233 5.2.3 有类型文件 234 5.2.4 无类型文件 238 5.2.5 初始化文件 239 5.2.6 文件流 241 5.2.7 内存映射文件 247 5.2.8 文件系统 250 5.3 键盘和鼠标编程 260 5.3.1 键盘编程 260 5.3.2 鼠标编程 262 第6章 Windows高级编程技术 271 6.1 DLL编程技术 271 6.1.1 DLL概貌 271 6.1.2 在Delphi中创建DLL 272 6.1.3 使用动态链接库 275 6.2 OLE和COM编程技术 277 6.2.1 COM对象和类工厂 277 6.2.2 Automation 280 6.2.3 创建Automation服务器 281 6.3 ActiveX编程技术 288 6.3.1 在Delphi中使用ActiveX控件 288 6.3.2 在Delphi中编写ActiveX控件 294 6.4 使用Windows注册表 294 6.5 Windows的消息处理 297 6.5.1 何为消息 298 6.5.2 消息的处理方法 298 6.5.3 Windows消息分类 300 6.5.4 发送消息 300 6.5.5 处理消息 301 6.5.6 消息过滤 302 第7章 图形图像及多媒体编程技术 305 7.1 图形图像技术 305 7.1.1 TCanvas对象 305 7.1.2 TShape对象 310 7.1.3 图像对象 311 7.2 多媒体程序设计 313 7.2.1 创建一个简单的媒体播放器 313 7.2.2 播放WAV文件和AVI视频 314 第8章 数据库应用技术 317 8.1 设计数据库应用程序 317 8.1.1 使用数据库 317 8.1.2 数据库应用程序的体系结构 319 8.1.3 设计用户界面 323 8.2 SQL编程技术 324 8.2.1 SQL语言简介 324 8.2.2 使用SQL编程 326 8.2.3 使用存储过程 331 8.2.4 使用事务 337 8.3 MIDAS和多层应用系统开发 339 8.3.1 MIDAS技术 339 8.3.2 MIDAS应用程序的工作流程 341 8.3.3 创建一个多层数据库应用程序的 基本过程 342 8.4 ADO数据库访问技术 346 8.4.1 ADO概述 347 8.4.2 连接ADO数据库 347 8.4.3 ADO数据集 354 8.4.4 使用TADODataSet 357 8.4.5 使用TADOTable 358 8.4.6 使用TADOQuery 358 第9章 Web应用程序开发技术 360 9.1 Web服务器应用程序概述 360 9.1.1 URL和HTTP 361 9.1.2 HTTP服务器 362 9.1.3 Web服务器应用程序类型 363 9.2 使用WebSnap 364 9.2.1 WebSnap概述 364 9.2.2 创建Web服务器应用程序 366 9.2.3 Web模块 370 9.2.4 Adapter 372 9.2.5 Page Producer 372 9.3 在WebSnap中编写服务器端脚本 373 9.3.1 脚本块 373 9.3.2 编辑和查看脚本 373 9.3.3 包含其他文件 374 9.3.4 脚本对象 375 9.4 WebSnap工作流程 376 9.4.1 WebContext 376 9.4.2 Dispatcher组件 376 9.4.3 Dispatcher工作原理 377 9.5 一个WebSnap实例 381 9.5.1 新建WebSnap应用程序 381 9.5.2 创建数据库模块 383 9.5.3 创建页面模块 384 9.6 Web服务器应用程序的调试 388 第三部分 人力资源管理系统解决 方案及应用剖析 第10章 系统概述 391 10.1 系统解决方案 391 10.1.1 系统背景 391 10.1.2 需求分析 392 10.1.3 实现方案 394 10.2 系统约定 396 10.2.1 编码规范 396 10.2.2 用户分组 399 10.3 数据库设计 400 10.3.1 设计数据库表结构 400 10.3.2 编写SQL Server 2000脚本语言 402 第11章 人事信息维护管理 408 11.1 人员维护 408 11.1.1完新建一个WebSnap应用程序 408 11.1.2完基本信息维护页面 411 11.1.3完完善记录的定位、浏览和增减功能 415 11.1.4完主从明细表的处理 419 11.2 照片维护 422 11.3 动态查询 428 11.3.1 决策查询 428 11.3.2 人员查询 433 11.4 图表显示 434 11.4.1 创建查询统计图表的ActiveForm 435 11.4.2 设计和整合统计图表页面 439 第12章 系统登录及安全控制 443 12.1 WebSnap安全机制 443 12.2 系统登录 446 12.3 安全控制 450 第13章 系统的进一步完善 453 13.1 增加BBS讨论组 453 13.2 增加收发邮件功能 457 13.2.1 登录邮件服务器 459 13.2.2 查看和阅读邮件 462 13.2.3 发送和群发邮件 473 13.3 页面的美化 477 第四部分 电子商务货物配送系统 解决方案及应用剖析 第14章 系统概述 485 14.1 系统解决方案 485 14.1.1 电子商务货物配送系统的实现 目标 485 14.1.2 对电子商务货物配送系统功能的 基本要求 486 14.1.3 电子商务货物配送系统的解决 方案 486 14.2 系统分析 488 14.3 数据组织 491 14.3.1 代码设计 491 14.3.2 数据库结构设计 494 14.3.3 创建数据库对象和数据维护 497 14.4 系统的初始设置 499 14.5 系统内部控制机制设计 506 第15章 代码维护模块 508 15.1 模块概述 508 15.2 使用Frame构建复用界面 509 15.3 使用DataModel集成数据库环境 512 15.4 使用Treeview导航表数据 517 15.5 使用公共单元实现模块维护 520 15.6 使用注册表设置系统参数 527 15.7 使用ActionManager管理操作动作 529 第16章 出库管理模块 539 16.1 模块概述 539 16.2 创建登录服务器程序 541 16.3 创建出库服务器程序 545 16.4 创建瘦型客户程序 549 第17章 统计分析模块 556 17.1 多层结构下的参数化查询 556 17.2 使用DBChart 560 17.3 自动容错和平衡服务器负载 562 第五部分 自动控制与监测系统 解决方案及应用剖析 第18章 自动控制与监测系统编程技术 567 18.1 Delphi中的多线程处理 568 18.1.1 进程和线程 568 18.1.2 多线程编程 572 18.1.3 线程的优先级 574 18.1.4 线程类 575 18.2 Windows的事件和消息 580 18.3 创建组件 582 18.3.1 创建组件 582 18.3.2 组件测试 585 18.3.3 注册组件 585 18.3.4 提供联机帮助 586 18.4 使用动态链接库 586 第19章 串口通信程序应用剖析 590 19.1 串行通信基础 590 19.1.1 数据通信基础 590 19.1.2 异步串行通信协议 592 19.1.3 DCE设备—Modem 593 19.1.4 RS-232C标准 595 19.2 串口通信API函数介绍 601 19.3 串口通信程序实现 607 19.3.1 利用嵌入式汇编语言开发 通信程序 607 19.3.2 利用多线程编写串口通信程序 621 19.3.3 Async32控件详解 625 19.3.4 Async32控件示例程序 633 第20章 硬件接口程序应用剖析 644 20.1 直接操作端口的Delphi单元 644 20.2 开发Windows驱动程序 646 20.3 用DLL编写硬件接口程序 648 20.4 用TVicHw32控件编程 650 20.4.1 TVicHw32控件说明 650 20.4.2 示例程序 653

    2012-12-15
    50
  • .NET应用架构设计原则、模式与实践

    第一部分 架构与设计的原则和模式 第1章 架构与设计的流程和核心概念 1.1 正确认识软件架构 1.1.1 什么是架构 1.1.2 架构师的职责 1.1.3 架构设计 1.1.4 架构设计的优点 1.2 正确理解设计的含义 1.2.1 设计的重要性 1.2.2 架构和设计的关系 1.3 架构设计中的重要概念 1.3.1 Tier和Layer 1.3.2 架构与框架 1.3.3 架构与模式 1.4 本章小结 第2章 模式、设计原则和方法 2.1 设计原则与软件设计 2.1.1 设计原则简述 2.1.2 设计原则实战 2.2 设计模式 2.2.1 设计模式简介 2.2.2 正确使用设计模式 2.2.3 设计模式实战 2.3 企业应用架构模式 2.3.1 什么是企业架构 2.3.2 什么是企业级开发 2.3.3 再议架构设计和模式 2.3.4 企业架构模式介绍 2.4 企业架构模式实战 2.5 设计方法 2.5.1 测试驱动开发 2.5.2 领域驱动开发 2.5.3 行为驱动开发 2.6 本章小结 第二部分 架构与设计的方法和最佳实践 第3章 架构分层 3.1 反模式项目实例 3.2 分层设计 3.2.1 正确理解分层 3.2.2 常见的分层架构设计 3.2.3 N-Tier架构 3.2.4 N-Tier架构需要考虑的因素 3.3 从重构到分层 3.3.1 业务层设计实战 3.3.2 数据访问层设计实战 3.3.3 服务层设计实战 3.3.4 显示层设计实战 3.4 本章小结 第4章 业务层设计 4.1 业务层组织模式剖析 4.1.1 Transaction Script模式与实战 4.1.2 Active Record模式与实战 4.1.3 Domain Model模式与实战 4.1.4 Anemic Domain Model模式与实战 4.1.5 业务层组织模式比较 4.2 业务层常用设计模式解析及实战 4.2.1 工厂方法模式 4.2.2 装饰者模式 4.2.3 模板方法模式 4.2.4 状态模式 4.2.5 策略模式 4.2.6 模板方法模式、状态模式、策略模式的比较 4.3 业务层常用的企业架构模式及实战 4.4 模式联合实战 4.4.1 需求规格模式 4.4.2 组合模式 4.5 业务层常用的设计原则及实战 4.6 本章小结 第5章 服务层设计 5.1 服务层详解 5.1.1 服务层的由来 5.1.2 服务层的职责是什么 5.1.3 服务层的必要性 5.2 服务层常用设计模式解析 5.2.1 外观模式 5.2.2 远程外观模式 5.2.3 数据传输对象模式 5.3 SOA介绍 5.3.1 SOA用途 5.3.2 SOA原则 5.3.3 服务设计原则 5.3.4 服务解惑 5.3.5 服务操作设计原则 5.3.6 服务粒度介绍 5.4 服务层常用消息模式解析 5.4.1 文档消息模式与请求-响应模式 5.4.2 预约保留模式 5.4.3 等幂模式 5.5 SOA实战——WCF实现 5.5.1 系统分析 5.5.2 业务层实战 5.5.3 数据层实战 5.5.4 服务层实战 5.5.5 代理层实战 5.5.6 显示层实战 5.6 本章小结 第6章 数据访问层设计 6.1 数据访问层简述 6.2 数据访问层的设计策略 6.2.1 仓储模式 6.2.2 数据访问对象模式 6.3 数据访问层常用模式与原则解析 6.3.1 工作单元 6.3.2 标识映射 6.3.3 延迟加载 6.3.4 数据并发控制 6.3.5 查询对象 6.4 ORM对象关系映射 6.4.1 NHibernate介绍 6.4.2 Entity Framework介绍 6.5 企业级领域驱动设计项目实战 6.5.1 业务层的实现 6.5.2 服务层的实现 6.5.3 数据访问层的实现 6.5.4 显示层的实现 6.6 本章小结 第7章 数据存储层设计 7.1 合理选择数据存储方案 7.1.1 数据存储的三种方式 7.1.2 选择合理的数据存储方案 7.2 数据库架构设计 7.2.1 分布数据 7.2.2 数据拆分 7.2.3 读写分离 7.2.4 数据缓存 7.3 数据库设计 7.3.1 数据库计划 7.3.2 逻辑数据库设计 7.3.3 物理数据库设计 7.4 SQL Server数据库性能瓶颈分析与解决方案 7.4.1 缺失索引的瓶颈分析与解决方案 7.4.2 昂贵查询的瓶颈分析与解决方案 7.4.3 数据库碎片的瓶颈分析与解决方案 7.5 本章小结 第8章 显示层设计 8.1 MVP模式的原理与实战 8.1.1 MVP模式实战(ASP.NET实现) 8.1.2 MVP模式经验谈 8.1.3 MVP模式之高级话题 8.2 前端控制器模式的原理与实战 8.2.1 前端控制器模式介绍 8.2.2 深入浅出命令模式 8.2.3 前端控制器模式实战 8.3 MVC模式的原理与实战 8.3.1 深入浅出MVC模式 8.3.2 MVC模式之高级话题 8.3.3 MVC模式实战——对ASP.NET MVC源码进行分析 8.4 PM模式的原理与实战 8.4.1 PM模式的解析 8.4.2 PM模式实战 8.5 MVVM模式的原理与实战 8.5.1 MVVM模式介绍 8.5.2 MVVM模式深度剖析 8.5.3 MVVM模式高级话题 8.6 本章小结 第三部分 .NET应用的架构与设计实战 第9章 IT创业产品互推平台的项目背景与功能介绍 9.1 IT创业产品互推平台背景 9.2 SNS功能介绍 9.2.1 用户管理 9.2.2 个人信息管理 9.2.3 软件展示功能 9.2.4 好友功能 9.2.5 站内信息功能 9.2.6 多媒体文件管理 9.2.7 博客 9.2.8 用户群 9.2.9 微博 9.2.10 共享功能 9.2.11 论坛 9.2.12 活动 9.2.13 投票 9.2.14 页面布局定制 9.2.15 评级 9.3 本章小结 第10章 IT创业产品互推平台架构设计 10.1 分层设计 10.1.1 逻辑分层的总体设计 10.1.2 通用功能设计 10.1.3 业务层设计 10.1.4 数据持久层设计 10.1.5 显示层设计 10.2 部署设计 10.2.1 单服务器部署 10.2.2 多服务器部署 10.3 文件存储的设计 10.4 基础类库的设计 10.4.1 缓存 10.4.2 配置读取 10.4.3 邮件发送 10.4.4 日志记录 10.4.5 辅助类的实现 10.5 本章小结 第11章 IT创业产品互推平台用户管理 11.1 用户管理功能分析 11.1.1 用户注册 11.1.2 用户登录 11.1.3 找回密码 11.1.4 激活账户 11.1.5 删除用户 11.1.6 更新用户 11.1.7 查询用户 11.2 用户管理接口的定义 11.2.1 服务层实现定义 11.2.2 业务模型定义 11.2.3 数据访问层的接口定义 11.3 用户管理的实现 11.3.1 服务层实现 11.3.2 业务层实现 11.3.3 数据访问层实现 11.3.4 显示层实现 11.4 本章小结 附录A

    2012-11-18
    50
  • 基于MODBUS协议的串口控件的实现

    基于MODBUS协议的串口控件的实现 PDF格式

    2012-08-15
    10
  • 领域驱动设计第二分卷

    一共两个压缩分卷,这是第二个分卷 第ⅰ部分 让领域模型发挥作用. 第1章 消化知识 5 1.1 有效建模的因素 9 1.2 知识消化 10 1.3 持续学习 11 1.4 知识丰富的设计 12 1.5 深层模型 15 第2章 交流及语言的使用 17 2.1 通用语言 17 2.2 利用对话改进模型 22 2.3 一个团队,一种语言 24 2.4 文档和图 25 2.4.1 书面的设计文档 27 2.4.2 执行的基础 29 2.5 说明性模型 29 第3章 将模型和实现绑定 32 3.1 模型驱动设计 33 3.2 建模范型和工具支持 36 3.3 突出主旨:为什么模型对用户很关键 41 3.4 实践型建模人员 43 .第ⅱ部分 模型驱动设计的构建块 第4章 分离领域 47 4.1 分层架构 47 4.1.1 层间的联系 51 4.1.2 架构框架 51 4.2 模型属于领域层 52 4.3 其他种类的隔离 55 第5章 软件中的模型描述 56 5.1 关联 57 5.2 实体(又称引用对象) 62 5.2.1 实体建模 65 5.2.2 设计标识操作 66 5.3 值对象 68 5.3.1 设计值对象 71 5.3.2 设计包含值对象的关联 73 5.4 服务 74 5.4.1 服务和分隔的领域层 75 5.4.2 粒度 77 5.4.3 访问服务 77 5.5 模块(包) 77 5.5.1 敏捷的模块 79 5.5.2 基础结构驱动打包的缺陷 80 5.6 建模范式 82 5.6.1 对象范式的优势 82 5.6.2 对象世界中的非对象 84 5.6.3 在混合范式中使用模型驱动设计 85 第6章 领域对象的生命周期 87 6.1 聚合 88 6.2 工厂 96 6.2.1 工厂及其应用场所的选择99 6.2.2 只需构造函数的情况 101 6.2.3 接口的设计 102 6.2.4 如何放置不变量的逻辑 103 6.2.5 实体工厂与值对象工厂 103 6.2.6 存储对象的重建 103 6.3 仓储 105 6.3.1 查询仓储 109 6.3.2 了解仓储实现的必要性 111 6.3.3 实现仓储 111 6.3.4 在框架内工作 113 6.3.5 与工厂的关系 113 6.4 为关系数据库设计对象 115 第7章 使用语言:扩展示例 117 7.1 货物运输系统概述 117 7.2 隔离领域:系统简介 119 7.3 区分实体和值对象 120 7.4 运输领域中的关联设计 121 7.5 聚合的边界 123 7.6 选择仓储 124 7.7 场景概述 125 7.7.1 应用特性示例:改变一件货物的目的地126 7.7.2 应用特性示例:重复业务126 7.8 对象的创建 126 7.8.1 cargo的工厂和构造函数 126 7.8.2 添加一个handling event127 7.9 停下来重构:cargo聚合的另一种设计 129 7.10 运输模型中的模块 131 7.11 引入新特性:配额检查 133 7.11.1 连接两个系统 134 7.11.2 改进模型:划分业务 135 7.11.3 性能调整 137 7.12 小结 137 第ⅲ部分 面向更深层解的重构 第8章 突破 143 8.1 关于突破的故事 144 8.1.1 中看不中用的模型 144 8.1.2 突破 146 8.1.3 更深层的模型 148 8.1.4 冷静的决定 149 8.1.5 成效 150 8.2 时机 150 8.3 着眼于根本 151 8.4 尾声:一连串的新理解 151 第9章 隐含概念转变为显式概念 153 9.1 概念挖掘 153 9.1.1 倾听表达用语 154 9.1.2 检查不协调之处 157 9.1.3 研究矛盾之处 162 9.1.4 查阅书籍 162 9.1.5 尝试,再尝试 164 9.2 如何建模不太明显的概念 164.. 9.2.1 显式的约束 165 9.2.2 作为领域对象的流程 167 9.2.3 规格 168 9.2.4 规格的应用和实现 171 第10章 柔性设计 184 10.1 释意接口 186 10.2 无副作用函数 190 10.3 断言 194 10.4 概念轮廓 197 10.5 孤立类 201 10.6 操作封闭 203 10.7 声明性设计 205 10.8 一个声明性风格的设计 207 10.9 攻击角度 215 10.9.1 切分子领域 215 10.9.2 尽可能利用现成的形式 216 第11章 应用分析模式 225 第12章 把设计模式和模型联系起来 237 12.1 策略 238 12.2 组合 241 12.3 为什么不用flyweight? 245 第13章 向更深层理解重构 247 13.1 发起重构 247 13.2 探索团队 248 13.3 前期工作 249 13.4 针对开发人员设计 249 13.5 时机选择 250 13.6 将危机视为机会 250 第ⅳ部分 战略性设计 第14章 维护模型完整性 255 14.1 限界上下文 257 14.2 持续集成 261 14.3 上下文映射 263 14.3.1 在上下文边界上的测试 269 14.3.2 组织和文档化上下文映射 269 14.4 限界上下文之间的关系 270 14.5 共享内核 271 14.6 顾客/供应商开发团队 272 14.7 同流者 275 14.8 防腐层 277 14.8.1 设计防腐层的接口 279 14.8.2 实现防腐层 279 14.8.3 一个关于警戒的故事 282 14.9 隔离方式 282 14.10 开放主机服务 284 14.11 公布语言 284 14.12 盲人摸象 287 14.13 选择模型上下文的策略 290 14.13.1 团队或更高层的决策 290 14.13.2 把自己放在上下文中 291 14.13.3 转换边界 291 14.13.4 接受我们不能改变的东西:描绘外部系统 292 14.13.5 与外部系统的关系 292 14.13.6 在设计系统 293 14.13.7 满足不同模型的特别需要 293 14.13.8 部署 294 14.13.9 权衡 295 14.13.10 考虑项目已经进行的情况 295 14.14 转换 296 14.14.1 合并上下文:隔离方式→共享内核 296 14.14.2 合并上下文:共享内核→持续集成 297 14.14.3 逐步淘汰原有系统 298 14.14.4 开放主机服务→公布语言 299 第15章 精炼 301 15.1 核心领域 302 15.1.1 选择核心 305 15.1.2 谁来负责精炼工作 305 15.2 精炼的逐步升级 306 15.3 通用子域 307 15.3.1 通用不一定可重用 312 15.3.2 项目风险管理 313 15.4 领域愿景声明 313 15.5 突出核心 315 15.5.1 精炼文档 316 15.5.2 把核心标记出来 317 15.5.3 把精炼文档作为开发过程的工具 318 15.6 内聚机制 319 15.6.1 通用子域与内聚机制 320 15.6.2 属于核心领域的机制 321 15.7 精炼到声明性风格 321 15.8 隔离核心 322 15.8.1 创建隔离核心的代价 323 15.8.2 推进团队决策 323 15.9 抽象核心 328 15.10 深层模型精炼 329 15.11 选择重构的目标 329 第16章 大比例结构 330 16.1 渐进顺序 333 16.2 系统隐喻 335 16.3 职责层 337 16.4 知识级别 349 16.5 插件框架 356 16.6 结构的约束 360 16.7 重构到合适的结构 361 16.7.1 最小化 362 16.7.2 交流和自律 362 16.7.3 结构重组产生柔性设计 362 16.7.4 精炼为开发指路 363 第17章 综合应用战略性设计 364 17.1 大比例结构和限界上下文的结合 364 17.2 大比例结构和精炼的结合 367 17.3 首先进行评估 369 17.4 由谁制定策略 369 17.4.1 在开发过程中自发产生 369 17.4.2 以客户为中心的架构团队 370 17.5 制定战略性设计决策的6个要点 370 17.5.1 技术框架同样如此 373 17.5.2 提防总体规划 374 第18章 尾声 375 附录a 关于模式 380 附录b 术语表 383 附录c 参考文献 387 附录d 关系图 389 ...

    2012-08-14
    10
  • 领域驱动设计第一分卷

    一共两个压缩分卷,这是第一个分卷 第ⅰ部分 让领域模型发挥作用. 第1章 消化知识 5 1.1 有效建模的因素 9 1.2 知识消化 10 1.3 持续学习 11 1.4 知识丰富的设计 12 1.5 深层模型 15 第2章 交流及语言的使用 17 2.1 通用语言 17 2.2 利用对话改进模型 22 2.3 一个团队,一种语言 24 2.4 文档和图 25 2.4.1 书面的设计文档 27 2.4.2 执行的基础 29 2.5 说明性模型 29 第3章 将模型和实现绑定 32 3.1 模型驱动设计 33 3.2 建模范型和工具支持 36 3.3 突出主旨:为什么模型对用户很关键 41 3.4 实践型建模人员 43 .第ⅱ部分 模型驱动设计的构建块 第4章 分离领域 47 4.1 分层架构 47 4.1.1 层间的联系 51 4.1.2 架构框架 51 4.2 模型属于领域层 52 4.3 其他种类的隔离 55 第5章 软件中的模型描述 56 5.1 关联 57 5.2 实体(又称引用对象) 62 5.2.1 实体建模 65 5.2.2 设计标识操作 66 5.3 值对象 68 5.3.1 设计值对象 71 5.3.2 设计包含值对象的关联 73 5.4 服务 74 5.4.1 服务和分隔的领域层 75 5.4.2 粒度 77 5.4.3 访问服务 77 5.5 模块(包) 77 5.5.1 敏捷的模块 79 5.5.2 基础结构驱动打包的缺陷 80 5.6 建模范式 82 5.6.1 对象范式的优势 82 5.6.2 对象世界中的非对象 84 5.6.3 在混合范式中使用模型驱动设计 85 第6章 领域对象的生命周期 87 6.1 聚合 88 6.2 工厂 96 6.2.1 工厂及其应用场所的选择99 6.2.2 只需构造函数的情况 101 6.2.3 接口的设计 102 6.2.4 如何放置不变量的逻辑 103 6.2.5 实体工厂与值对象工厂 103 6.2.6 存储对象的重建 103 6.3 仓储 105 6.3.1 查询仓储 109 6.3.2 了解仓储实现的必要性 111 6.3.3 实现仓储 111 6.3.4 在框架内工作 113 6.3.5 与工厂的关系 113 6.4 为关系数据库设计对象 115 第7章 使用语言:扩展示例 117 7.1 货物运输系统概述 117 7.2 隔离领域:系统简介 119 7.3 区分实体和值对象 120 7.4 运输领域中的关联设计 121 7.5 聚合的边界 123 7.6 选择仓储 124 7.7 场景概述 125 7.7.1 应用特性示例:改变一件货物的目的地126 7.7.2 应用特性示例:重复业务126 7.8 对象的创建 126 7.8.1 cargo的工厂和构造函数 126 7.8.2 添加一个handling event127 7.9 停下来重构:cargo聚合的另一种设计 129 7.10 运输模型中的模块 131 7.11 引入新特性:配额检查 133 7.11.1 连接两个系统 134 7.11.2 改进模型:划分业务 135 7.11.3 性能调整 137 7.12 小结 137 第ⅲ部分 面向更深层解的重构 第8章 突破 143 8.1 关于突破的故事 144 8.1.1 中看不中用的模型 144 8.1.2 突破 146 8.1.3 更深层的模型 148 8.1.4 冷静的决定 149 8.1.5 成效 150 8.2 时机 150 8.3 着眼于根本 151 8.4 尾声:一连串的新理解 151 第9章 隐含概念转变为显式概念 153 9.1 概念挖掘 153 9.1.1 倾听表达用语 154 9.1.2 检查不协调之处 157 9.1.3 研究矛盾之处 162 9.1.4 查阅书籍 162 9.1.5 尝试,再尝试 164 9.2 如何建模不太明显的概念 164.. 9.2.1 显式的约束 165 9.2.2 作为领域对象的流程 167 9.2.3 规格 168 9.2.4 规格的应用和实现 171 第10章 柔性设计 184 10.1 释意接口 186 10.2 无副作用函数 190 10.3 断言 194 10.4 概念轮廓 197 10.5 孤立类 201 10.6 操作封闭 203 10.7 声明性设计 205 10.8 一个声明性风格的设计 207 10.9 攻击角度 215 10.9.1 切分子领域 215 10.9.2 尽可能利用现成的形式 216 第11章 应用分析模式 225 第12章 把设计模式和模型联系起来 237 12.1 策略 238 12.2 组合 241 12.3 为什么不用flyweight? 245 第13章 向更深层理解重构 247 13.1 发起重构 247 13.2 探索团队 248 13.3 前期工作 249 13.4 针对开发人员设计 249 13.5 时机选择 250 13.6 将危机视为机会 250 第ⅳ部分 战略性设计 第14章 维护模型完整性 255 14.1 限界上下文 257 14.2 持续集成 261 14.3 上下文映射 263 14.3.1 在上下文边界上的测试 269 14.3.2 组织和文档化上下文映射 269 14.4 限界上下文之间的关系 270 14.5 共享内核 271 14.6 顾客/供应商开发团队 272 14.7 同流者 275 14.8 防腐层 277 14.8.1 设计防腐层的接口 279 14.8.2 实现防腐层 279 14.8.3 一个关于警戒的故事 282 14.9 隔离方式 282 14.10 开放主机服务 284 14.11 公布语言 284 14.12 盲人摸象 287 14.13 选择模型上下文的策略 290 14.13.1 团队或更高层的决策 290 14.13.2 把自己放在上下文中 291 14.13.3 转换边界 291 14.13.4 接受我们不能改变的东西:描绘外部系统 292 14.13.5 与外部系统的关系 292 14.13.6 在设计系统 293 14.13.7 满足不同模型的特别需要 293 14.13.8 部署 294 14.13.9 权衡 295 14.13.10 考虑项目已经进行的情况 295 14.14 转换 296 14.14.1 合并上下文:隔离方式→共享内核 296 14.14.2 合并上下文:共享内核→持续集成 297 14.14.3 逐步淘汰原有系统 298 14.14.4 开放主机服务→公布语言 299 第15章 精炼 301 15.1 核心领域 302 15.1.1 选择核心 305 15.1.2 谁来负责精炼工作 305 15.2 精炼的逐步升级 306 15.3 通用子域 307 15.3.1 通用不一定可重用 312 15.3.2 项目风险管理 313 15.4 领域愿景声明 313 15.5 突出核心 315 15.5.1 精炼文档 316 15.5.2 把核心标记出来 317 15.5.3 把精炼文档作为开发过程的工具 318 15.6 内聚机制 319 15.6.1 通用子域与内聚机制 320 15.6.2 属于核心领域的机制 321 15.7 精炼到声明性风格 321 15.8 隔离核心 322 15.8.1 创建隔离核心的代价 323 15.8.2 推进团队决策 323 15.9 抽象核心 328 15.10 深层模型精炼 329 15.11 选择重构的目标 329 第16章 大比例结构 330 16.1 渐进顺序 333 16.2 系统隐喻 335 16.3 职责层 337 16.4 知识级别 349 16.5 插件框架 356 16.6 结构的约束 360 16.7 重构到合适的结构 361 16.7.1 最小化 362 16.7.2 交流和自律 362 16.7.3 结构重组产生柔性设计 362 16.7.4 精炼为开发指路 363 第17章 综合应用战略性设计 364 17.1 大比例结构和限界上下文的结合 364 17.2 大比例结构和精炼的结合 367 17.3 首先进行评估 369 17.4 由谁制定策略 369 17.4.1 在开发过程中自发产生 369 17.4.2 以客户为中心的架构团队 370 17.5 制定战略性设计决策的6个要点 370 17.5.1 技术框架同样如此 373 17.5.2 提防总体规划 374 第18章 尾声 375 附录a 关于模式 380 附录b 术语表 383 附录c 参考文献 387 附录d 关系图 389 ...

    2012-08-14
    12
  • 重构:改善既有代码的设计(中文版).

    第1章 重构,第一个案例1 1.1 起点1 1.2 重构的第一步7 1.3 分解并重组statement()8 1.4 运用多态取代与价格相关的条件逻辑34 1.5 结语52 第2章 重构原则53 2.1 何谓重构53 2.2 为何重构55 2.3 何时重构57 2.4 怎么对经理说60 2.5 重构的难题62 2.6 重构与设计66 2.7 重构与性能69 2.8 重构起源何处71 第3章 代码的坏味道75 3.1 DuplicatedCode(重复代码)76 3.2 LongMethod(过长函数)76 3.3 LargeClass(过大的类)78 3.4 LongParameterList(过长参数列)78 3.5 DivergentChange(发散式变化)79 3.6 ShotgunSurgery(霰弹式修改)80 3.7 FeatureEnvy(依恋情结)80 3.8 DataClumps(数据泥团)81 3.9 PrimitiveObsession(基本类型偏执)81 3.10 SwitchStatements(switch惊悚现身)82 3.11 ParallelInheritanceHierarchies(平行继承体系)83 3.12 LazyClass(冗赘类)83 3.13 SpeculativeGenerality(夸夸其谈未来性)83 3.14 TemporaryField(令人迷惑的暂时字段)84 3.15 MessageChains(过度耦合的消息链)84 3.16 MiddleMan(中间人)85 3.17 InappropriateIntimacy(狎昵关系)85 3.18 AlternativeClasseswithDifferentInterfaces(异曲同工的类)85 3.19 IncompleteLibraryClass(不完美的库类)86 3.20 DataClass(纯稚的数据类)86 3.21 RefusedBequest(被拒绝的遗赠)87 3.22 Comments(过多的注释)87 第4章 构筑测试体系89 4.1 自测试代码的价值89 4.2 JUnit测试框架91 4.3 添加更多测试97 第5章 重构列表103 5.1 重构的记录格式103 5.2 寻找引用点105 5.3 这些重构手法有多成熟106 第6章 重新组织函数109 6.1 ExtractMethod(提炼函数)110 6.2 InlineMethod(内联函数)117 6.3 InlineTemp(内联临时变量)119 6.4 ReplaceTempwithQuery(以查询取代临时变量)120 6.5 IntroduceExplainingVariable(引入解释性变量)124 6.6 SplitTemporaryVariable(分解临时变量)128 6.7 RemoveAssignmentstoParameters(移除对参数的赋值)131 6.8 ReplaceMethodwithMethodObject(以函数对象取代函数)135 6.9 SubstituteAlgorithm(替换算法)139 第7章 在对象之间搬移特性141 7.1 MoveMethod(搬移函数)142 7.2 MoveField(搬移字段)146 7.3 ExtractClass(提炼类)149 7.4 InlineClass(将类内联化)154 7.5 HideDelegate(隐藏“委托关系”)157 7.6 RemoveMiddleMan(移除中间人)160 7.7 IntroduceForeignMethod(引入外加函数)162 7.8 IntroduceLocalExtension(引入本地扩展)164 第8章 重新组织数据169 8.1 SelfEncapsulateField(自封装字段)171 8.2 ReplaceDataValuewithObject(以对象取代数据值)175 8.3 ChangeValuetoReference(将值对象改为引用对象)179 8.4 ChangeReferencetoValue(将引用对象改为值对象)183 8.5 ReplaceArraywithObject(以对象取代数组)186 8.6 DuplicateObservedData(复制“被监视数据”)189 8.7 ChangeUnidirectionalAssociationtoBidirectional(将单向关联改为双向关联)197 8.8 ChangeBidirectionalAssociationtoUnidirectional(将双向关联改为单向关联)200 8.9 ReplaceMagicNumberwithSymbolicConstant(以字面常量取代魔法数)204 8.10 EncapsulateField(封装字段)206 8.11 EncapsulateCollection(封装集合)208 8.12 ReplaceRecordwithDataClass(以数据类取代记录)217 8.13 ReplaceTypeCodewithClass(以类取代类型码)218 8.14 ReplaceTypeCodewithSubclasses(以子类取代类型码)223 8.15 ReplaceTypeCodewithState/Strategy(以State/Strategy取代类型码)227 8.16 ReplaceSubclasswithFields(以字段取代子类)232 第9章 简化条件表达式237 9.1 DecomposeConditional(分解条件表达式)238 9.2 ConsolidateConditionalExpression(合并条件表达式)240 9.3 ConsolidateDuplicateConditionalFragments(合并重复的条件片段)243 9.4 RemoveControlFlag(移除控制标记)245 9.5 ReplaceNestedConditionalwithGuardClauses(以卫语句取代嵌套条件表达式)250 9.6 ReplaceConditionalwithPolymorphism(以多态取代条件表达式)255 9.7 IntroduceNullObject(引入Null对象)260 9.8 IntroduceAssertion(引入断言)267 第10章 简化函数调用271 10.1 RenameMethod(函数改名)273 10.2 AddParameter(添加参数)275 10.3 RemoveParameter(移除参数)277 10.4 SeparateQueryfromModifier(将查询函数和修改函数分离)279 10.5 ParameterizeMethod(令函数携带参数)283 10.6 ReplaceParameterwithExplicitMethods(以明确函数取代参数)285 10.7 PreserveWholeObject(保持对象完整)288 10.8 ReplaceParameterwithMethods(以函数取代参数)292 10.9 IntroduceParameterObject(引入参数对象)295 10.10 RemoveSettingMethod(移除设值函数)300 10.11 HideMethod(隐藏函数)303 10.12 ReplaceConstructorwithFactoryMethod(以工厂函数取代构造函数)304 10.13 EncapsulateDowncast(封装向下转型)308 10.14 ReplaceErrorCodewithException(以异常取代错误码)310 10.15 ReplaceExceptionwithTest(以测试取代异常)315 第11章 处理概括关系319 11.1 PullUpField(字段上移)320 11.2 PullUpMethod(函数上移)322 11.3 PullUpConstructorBody(构造函数本体上移)325 11.4 PushDownMethod(函数下移)328 11.5 PushDownField(字段下移)329 11.6 ExtractSubclass(提炼子类)330 …… 第12章 大型重构359 第13章 重构,复用与现实379 第14章 重构工具401 第15章 总结409 参考书目413 要点列表417 索引419

    2012-08-12
    50
  • 面向对象分析与设计(第3版).

    第1部分 概念 第1章 复杂性 2 1.1 复杂系统的结构 2 1.1.1 个人计算机的结构 3 1.1.2 植物和动物的结构 3 1.1.3 物质的结构 4 1.1.4 社会机构的结构 4 1.2 软件固有的复杂性 5 1.2.1 定义软件复杂性 5 1.2.2 为什么软件在本质上是复杂的 5 1.3 复杂系统的5个属性 8 1.3.1 层次结构 8 1.3.2 相对本原 8 1.3.3 分离关注 9 1.3.4 共同模式 9 1.3.5 稳定的中间形式 9 1.4 有组织和无组织的复杂性 10 1.4.1 复杂系统的规范形式 10 1.4.2 处理复杂性时人的能力的局限 12 1.5 从混沌到有序 12 1.5.1 分解的作用 13 1.5.2 抽象的作用 16 1.5.3 层次结构的作用 16 1.6 复杂系统的设计 17 1.6.1 作为科学和艺术的工程 17 1.6.2 设计的含义 17 1.7 小结 19 第2章 对象模型 20 2.1 对象模型的演进 20 2.1.1 程序设计语言的换代 20 2.1.2 第一代和第二代早期程序设计语言的拓扑结构 22 2.1.3 第二代后期和第三代早期程序设计语言的结构 23 2.1.4 第三代后期程序设计语言的结构 23 2.1.5 基于对象和面向对象的程序设计语言的结构 24 2.2 对象模型基础 26 2.2.1 面向对象编程 29 2.2.2 面向对象设计 29 2.2.3 面向对象分析 30 2.3 对象模型要素 30 2.3.1 抽象的意义 31 2.3.2 封装的意义 35 2.3.3 模块化的意义 38 2.3.4 层次结构的意义 41 2.3.5 类型的意义 46 2.3.6 并发的意义 47 2.3.7 持久的意义 49 2.4 应用对象模型 51 2.4.1 对象模型的好处 51 2.4.2 开放式问题 52 2.5 小结 52 第3章 类与对象 53 3.1 对象的本质 53 3.1.1 什么是对象,什么不是对象 53 3.1.2 状态 55 3.1.3 行为 57 3.1.4 标识符 60 3.2 对象之间的关系 62 3.2.1 链接 62 3.2.2 聚合 64 3.3 类的本质 65 3.3.1 什么是类,什么不是类 65 3.3.2 接口和实现 66 3.3.3 类的生命周期 68 3.4 类之间的关系 68 3.4.1 关联 69 3.4.2 继承 70 3.4.3 聚合 78 3.4.4 依赖关系 79 3.5 类与对象的互动 79 3.5.1 类与对象的关系 79 3.5.2 类与对象在分析和设计中的角色 79 3.6 创建高品质的类与对象 80 3.6.1 评判一种抽象的品质 80 3.6.2 选择操作 81 3.6.3 选择关系 82 3.6.4 选择实现 83 3.7 小结 84 第4章 分类 85 4.1 正确分类的重要性 85 4.1.1 分类的困难 86 4.1.2 分类的增量和迭代本质 87 4.2 确定类和对象 88 4.2.1 经典方法和现代方法 89 4.2.2 面向对象分析 92 4.3 关键抽象与机制 97 4.3.1 确定关键抽象 97 4.3.2 识别机制 99 4.4 小结 101 第2部分 方法 第5章 表示法 104 5.1 统一建模语言 104 5.1.1 简单历史回顾 104 5.1.2 模型与多重视图 105 5.1.3 图分类 105 5.1.4 在实践中使用图 107 5.1.5 概念模型.逻辑模型和物理模型 108 5.1.6 工具的角色 108 5.1.7 面向对象开发的产品 108 5.1.8 规模上的伸缩 109 5.1.9 UML的语法和语义 109 5.1.10 UML2.0信息资源 110 5.2 包图 110 5.2.1 基本概念:包表示法 110 5.2.2 基本概念:元素的可见性 111 5.2.3 基本概念:依赖关系 111 5.2.4 基本概念:包图 113 5.2.5 高级概念:导入和访问 114 5.3 组件图 117 5.3.1 基本概念:组件表示法 117 5.3.2 基本概念:组件图 118 5.3.3 基本概念:组件接口 119 5.3.4 基本概念:组件实现 121 5.3.5 高级概念:组件的内部结构 122 5.4 部署图 123 5.4.1 基本概念:工件表示法 123 5.4.2 基本概念:节点表示法 124 5.4.3 基本概念:部署图 124 5.5 用例图 126 5.5.1 基本概念:执行者 126 5.5.2 基本概念:用例 127 5.5.3 基本概念:用例图 127 5.5.4 高级概念:[[include]]和[[extend]]关系 129 5.5.5 高级概念:泛化 133 5.6 活动图 133 5.6.1 基本概念:动作 134 5.6.2 基本概念:开始和停止 134 5.6.3 基本概念:判断节点和合并节点 134 5.6.4 基本概念:分区 135 5.6.5 高级概念:分叉.结合和并发 135 5.6.6 高级概念:对象流 138 5.6.7 高级概念:其他元素 138 5.7 类图 138 5.7.1 基本概念:类表示法 138 5.7.2 基本概念:类关系 140 5.7.3 高级概念:模板(参数化)类 142 5.7.4 高级概念:可见性 143 5.7.5 高级概念:关联端名称和限定符 144 5.7.6 高级概念:约束 145 5.7.7 高级概念:关联类和注解 148 5.8 序列图 149 5.8.1 基本概念:对象与交互 149 5.8.2 基本概念:生命线与消息 149 5.8.3 高级概念:销毁事件 151 5.8.4 高级概念:执行说明 151 5.8.5 高级概念:交互使用 153 5.8.6 高级概念:控制结构 153 5.9 交互概述图 155 5.9.1 基本概念:框 155 5.9.2 基本概念:控制流元素 155 5.9.3 基本概念:交互图元素 156 5.10 组合结构图 157 5.10.1 基本概念:组合结构的部分 157 5.10.2 基本概念:组合结构的部分与接口 157 5.10.3 基本概念:组合结构连接器 158 5.10.4 高级概念:协作.. 158 5.11 状态机图 159 5.11.1 基本概念:初始状态.最终状态和简单状态 160 5.11.2 基本概念:转换与事件 160 5.11.3 高级概念:状态活动——入口活动.执行活动和出口活动 162 5.11.4 高级概念:控制转换 162 5.11.5 高级概念:复合状态与嵌套状态 163 5.11.6 高级概念:并发与控制 165 5.11.7 高级概念:子状态机状态 168 5.11.8 高级概念:其他状态机图元素 169 5.12 时间图 170 5.12.1 基本概念:更多相同之处 170 5.12.2 基本概念:布局 170 5.12.3 基本概念:事件 171 5.12.4 基本概念:约束 171 5.12.5 高级概念:另一种表示形式 172 5.12.6 高级概念:事件与消息 172 5.13 对象图 173 5.13.1 基本概念:对象 173 5.13.2 基本概念:对象关系 173 5.13.3 高级概念:端点名称和限定符 174 5.14 通信图 175 5.14.1 基本概念:对象.链接和消息 175 5.14.2 基本概念:顺序表达式 176 5.14.3 高级概念:消息与同步 177 5.14.4 高级概念:迭代子句和警戒条件 178 5.15 小结 179 第6章 过程 181 6.1 首要原则 181 6.1.1 成功项目的特征 181 6.1.2 追求理性的开发过程 184 6.2 宏观过程:软件开发生命周期 186 6.2.1 概述 187 6.2.2 宏观过程的内容维:科目 188 6.2.3 宏观过程的时间维:里程碑和阶段 190 6.2.4 宏观过程的时间维:迭代 195 6.2.5 发行计划 196 6.3 微观过程:分析与设计过程 198 6.3.1 概述 198 6.3.2 抽象层次 199 6.3.3 活动 200 6.3.4 产品 201 6.3.5 微观过程与抽象层次 203 6.3.6 识别元素 205 6.3.7 确定元素间的协作 208 6.3.8 确定元素间的关系 211 6.3.9 详细确定元素的语义 213 6.4 小结 216 第7章 实战 217 7.1 管理和计划 217 7.1.1 风险管理 218 7.1.2 任务计划 218 7.1.3 开发评审 219 7.2 人员配备 220 7.2.1 资源配置 220 7.2.2 开发团队角色 221 7.3 发布版本管理 223 7.3.1 配置管理和版本控制 223 7.3.2 集成 224 7.3.3 测试 224 7.4 复用 225 7.4.1 复用的元素 225 7.4.2 建立复用制度 225 7.5 质量保证和度量 226 7.5.1 软件质量 226 7.5.2 面向对象度量 226 7.6 文档化 229 7.6.1 开发遗产 229 7.6.2 文档化的内容 229 7.7 工具 230 7.7.1 工具种类 230 7.7.2 组织上的意义 231 7.8 特殊主题 231 7.8.1 领域特定问题 231 7.8.2 采纳面向对象技术 232 7.9 面向对象开发的好处和风险 233 7.9.1 面向对象开发的好处 233 7.9.2 面向对象开发的风险 233 7.10 小结 235 第3部分 应用 第8章 系统架构——基于卫星的导航 238 8.1 先启 238 8.1.1 卫星导航系统的需求 239 8.1.2 定义问题的边界 240 8.1.3 决定使命用例 243 8.1.4 决定系统用例 245 8.2 精化 248 8.2.1 开发一个好的架构 248 8.2.2 定义架构开发活动 248 8.2.3 验证所建议的系统架构 249 8.2.4 分配非功能需求和阐明接口 255 8.2.5 规定系统架构及其部署 257 8.2.6 分解系统架构 259 8.3 构造 265 8.4 后移交 265 8.4.1 添加新的功能 265 8.4.2 改变目标硬件 266 第9章 控制系统——交通管理 267 9.1 先启 268 9.1.1 列车交通管理系统的需求 268 9.1.2 决定系统用例 270 9.2 精化 273 9.2.1 分析系统功能 274 9.2.2 定义TTMS架构 277 9.2.3 从系统工程到硬件和软件工程 279 9.2.4 关键抽象和机制 281 9.3 构造 282 9.3.1 消息传送 283 9.3.2 列车日程计划 285 9.3.3 显示信息 288 9.3.4 传感器数据采集 289 9.3.5 发布版本管理 289 9.3.6 系统架构 290 9.3.7 子系统规格 291 9.4 后移交 293 第10章 人工智能——密码分析 294 10.1 先启 295 10.1.1 密码分析需求 295 10.1.2 定义问题的边界 296 10.1.3 黑板框架的架构 297 10.1.4 知识源的分析 299 10.2 精化 299 10.2.1 黑板对象 300 10.2.2 依赖和认定 301 10.3 构造 303 10.3.1 设计黑板对象 304 10.3.2 设计知识源 308 10.3.3 设计控制器 313 10.3.4 集成黑板框架 314 10.3.5 添加新的知识源 317 10.4 后移交 318 10.4.1 系统增强 318 10.4.2 改变需求 320 第11章 数据采集——气象监测站 321 11.1 先启 321 11.1.1 气象监测站需求 321 11.1.2 定义问题的边界 322 11.1.3 场景 330 11.2 精化 331 11.2.1 气象监测系统用例 331 11.2.2 架构框架 338 11.3 构造 340 11.3.1 帧机制 340 11.3.2 发布计划 343 11.3.3 传感器机制 344 11.3.4 显示机制 346 11.3.5 用户界面机制 346 11.4 后移交 349 第12章 Web应用——休假跟踪系统 350 12.1 先启 350 12.1.1 需求 350 12.1.2 用例模型 352 12.2 精化 353 12.2.1 部署视图 354 12.2.2 逻辑视图 355 12.2.3 进程视图 357 12.2.4 实现视图 359 12.2.5 用例视图 359 12.3 构造 362 12.3.1 用户体验模型 362 12.3.2 分析和设计模型 364 12.3.3 实体 372 12.3.4 控制器 379 12.3.5 Web页面和用户界面 380 12.4 移交和后移交 384 附录A 面向对象编程语言 386 A.1 语言进化 386 A.2 Smalltalk 389 A.2.1 概述 390 A.2.2 例子 390 A.2.3 参考文献 393 A.3 C++ 393 A.3.1 概述 394 A.3.2 例子 394 A.3.3 参考文献 397 A.4 Java 397 A.4.1 概述 398 A.4.2 例子 399 A.4.3 参考文献 402 附录B 进一步阅读 403 注解 409 术语表 430 分类书目 438

    2012-08-11
    50
  • 敏捷软件开发:原则、模式与实践(C#版).

    第一部分 敏捷开发 第1章 敏捷实践  1.1 敏捷联盟  1.1.1 人和交互重于过程和工具  1.1.2 可以工作的软件重于面面俱到的文档  1.1.3 客户合作重于合同谈判  1.1.4 随时应对变化重于遵循计划 1.2 原则  1.3 结论 1.4 参考文献  第2章 极限编程概述  2.1 极限编程实践 2.1.1 完整团队  2.1.2 用户故事  2.1.3 短交付周期  2.1.4 验收测试  2.1.5 结对编程  2.1.6 测试驱动开发  2.1.7 集体所有权  2.1.8 持续集成  2.1.9 可持续的开发速度  2.1.10 开放的工作空间  2.1.11 计划游戏  2.1.12 简单设计  2.1.13 重构  2.1.14 隐喻  2.2 结论  2.3 参考文献  第3章 计划  3.1 初始探索  3.2 发布计划  3.3 迭代计划  3.4 定义“完成”  3.5 任务计划  3.6 迭代  3.7 跟踪  3.8 结论  3.9 参考文献  第4章 测试  4.1 测试驱动开发  4.1.1 测试优先设计的例子  4.1.2 测试促使模块之间隔离  4.1.3 意外获得的解耦合  4.2 验收测试  4.3 意外获得的构架  4.4 结论  4.5 参考文献  第5章 重构  5.1 素数产生程序:一个简单的重构示例  5.1.1 单元测试  5.1.2 重构  5.1.3 最后审视  5.2 结论  5.3 参考文献  第6章 一次编程实践  6.1 保龄球比赛  6.2 结论  第二部分 敏捷设计 第7章 什么是敏捷设计  7.1 设计臭味  7.1.1 设计臭味——腐化软件的气味  7.1.2 僵化性  7.1.3 脆弱性  7.1.4 顽固性  7.1.5 粘滞性  7.1.6 不必要的复杂性  7.1.7 不必要的重复  7.1.8 晦涩性  7.2 软件为何会腐化  7.3 Copy程序  7.3.1 熟悉的场景  7.3.2 Copy程序的敏捷设计  7.4 结论  7.5 参考文献  第8章 SRP:单一职责原则  8.1 定义职责  8.2 分离耦合的职责  8.3 持久化  8.4 结论  8.5 参考文献  第9章 OCP:开放-封闭原则  9.1 OCP概述  9.2 Shape应用程序  9.2.1 违反OCP  9.2.2 遵循OCP  9.2.3 预测变化和“贴切的”结构  9.2.4 放置吊钩  9.2.5 使用抽象获得显式封闭  9.2.6 使用“数据驱动”的方法获取封闭性  9.3 结论  9.4 参考文献  第10章 LSP:Liskov替换原则  10.1 违反LSP的情形  10.1.1 简单例子  10.1.2 更微妙的违反情形  10.1.3 实际的例子  10.2 用提取公共部分的方法代替继承  10.3 启发式规则和习惯用法  10.4 结论  10.5 参考文献  第11章 DIP:依赖倒置原则  11.1 层次化  11.1.1 倒置的接口所有权  11.1.2 依赖于抽象  11.2 简单的DIP示例 11.3 熔炉示例  11.4 结论  11.5 参考文献  第12章 ISP:接口隔离原则  12.1 接口污染  12.2 分离客户就是分离接口  12.3 类接口与对象接口  12.3.1 使用委托分离接口  12.3.2 使用多重继承分离接口  12.4 ATM用户界面的例子  12.5 结论  12.6 参考文献  第13章 C#程序员UML概观  13.1 类图  13.2 对象图  13.3 顺序图  13.4 协作图  13.5 状态图  13.6 结论  13.7 参考文献  第14章 使用UML  14.1 为什么建模  14.1.1 为什么构建软件模型  14.1.2 编码前应该构建面面俱到的设计吗  14.2 有效使用UML  14.2.1 与他人交流  14.2.2 脉络图  14.2.3 项目结束文档 14.2.4 要保留的和要丢弃的  14.3 迭代式改进  14.3.1 行为优先  14.3.2 检查结构  14.3.3 想象代码  14.3.4 图的演化  14.4 何时以及如何绘制图示  14.4.1 何时要画图,何时不要画图  14.4.2 CASE工具  14.4.3 那么,文档呢  14.5 结论  第15章 状态图  15.1 基础知识  15.1.1 特定事件  15.1.2 超状态  15.1.3 初始伪状态和结束伪状态  15.2 使用FSM图示  15.3 结论  第16章 对象图  16.1 即时快照  16.2 主动对象  16.3 结论  第17章 用例  17.1 编写用例  17.1.1 备选流程  17.1.2 其他东西呢  17.2 用例图  17.3 结论  17.4 参考文献  第18章 顺序图  18.1 基础知识  18.1.1 对象、生命线、消息及其他  18.1.2 创建和析构  18.1.3 简单循环  18.1.4 时机和场合  18.2 高级概念  18.2.1 循环和条件  18.2.2 耗费时间的消息  18.2.3 异步消息  18.2.4 多线程  18.2.5 主动对象  18.2.6 向接口发送消息  18.3 结论  第19章 类图  19.1 基础知识  19.1.1 类  19.1.2 关联  19.1.3 继承  19.2 类图示例  19.3 细节  19.3.1 类衍型  19.3.2 抽象类  19.3.3 属性  19.3.4 聚集  19.3.5 组合  19.3.6 多重性  19.3.7 关联衍型  19.3.8 内嵌类  19.3.9 关联类  19.3.10 关联修饰符  19.4 结论  19.5 参考文献  第20章 咖啡的启示  20.1 MarkIV型专用咖啡机  20.1.1 规格说明书  20.1.2 常见的丑陋方案  20.1.3 虚构的抽象  20.1.4 改进方案  20.1.5 实现抽象模型  20.1.6 这个设计的好处  20.2 面向对象过度设计  20.3 参考文献  第三部分 薪水支付案例研究 第21章 COMMAND模式和ACTIVEOBJECT模式:多功能与多任务  21.1 简单的Command  21.2 事务  21.2.1 实体上解耦和时间上解耦  21.2.2 时间上解耦  21.3 Undo()方法  21.4 ACTIVEOBJECT模式  21.5 结论  21.6 参考文献  第22章 TEMPLATEMETHOD模式和STRATEGY模式:继承和委托  22.1 TEMPLATEMETHOD模式  22.1.1 滥用模式  22.1.2 冒泡排序  22.2 STRATEGY模式  22.3 结论  22.4 参考文献  第23章 FACADE模式和MEDIATOR模式  23.1 FACADE模式  23.2 MEDIATOR模式  23.3 结论  23.4 参考文献  第24章 SINGLETON模式和MONOSTATE模式  24.1 SINGLETON模式  24.1.1 SINGLETON模式的好处  24.1.2 SINGLETON模式的代价  24.1.3 运用SINGLETON模式  24.2 MONOSTATE模式  24.2.1 MONOSTATE模式的好处  24.2.2 MONOSTATE模式的代价  24.2.3 运用MONOSTATE模式  24.3 结论 24.4 参考文献  第25章 NULLOBJECT模式 25.1 描述  25.2 结论  25.3 参考文献  第26章 薪水支付案例研究:第一次迭代开始  26.1 初步的规格说明  26.2 基于用例分析  26.2.1 增加新雇员  26.2.2 删除雇员  26.2.3 登记考勤卡  26.2.4 登记销售凭条  26.2.5 登记工会服务费  26.2.6 更改雇员明细  26.2.7 发薪日  26.3 反思:找出底层的抽象  26.3.1 雇员支付类别抽象  26.3.2 支付时间表抽象  26.3.3 支付方式  26.3.4 从属关系  26.4 结论  26.5 参考文献  第27章 薪水支付案例研究:实现  27.1 事务  27.1.1 增加雇员  27.1.2 删除雇员  27.1.3 考勤卡、销售凭条以及服务费用  27.1.4 更改雇员属性  27.1.5 犯了什么晕  27.1.6 支付雇员薪水  27.1.7 支付领月薪的雇员薪水  27.1.8 支付钟点工薪水  27.2 主程序  27.3 数据库  27.4 结论  27.5 关于本章  27.6 参考文献  第四部分 打包薪水支付系统 第28章 包和组件的设计原则  28.1 包和组件  28.2 组件的内聚性原则:粒度  28.2.1 重用—发布等价原则  28.2.2 共同重用原则  28.2.3 共同封闭原则  28.2.4 组件内聚性总结  28.3 组件的耦合性原则:稳定性  28.3.1 无环依赖原则  28.3.2 稳定依赖原则  28.3.3 稳定抽象原则  28.4 结论  第29章 FACTORY模式  29.1 依赖问题  29.2 静态类型与动态类型  29.3 可替换的工厂  29.4 对测试支架使用对象工厂  29.5 工厂的重要性  29.6 结论  29.7 参考文献  第30章 薪水支付案例研究:包分析  30.1 组件结构和符号  30.2 应用CCP  30.3 应用REP  30.4 耦合和封装  30.5 度量  30.6 度量薪水支付应用程序  30.6.1 对象工厂  30.6.2 重新思考内聚的边界  30.7 最终的包结构  30.8 结论  30.9 参考文献  第31章 COMPOSITE模式  31.1 组合命令  31.2 多重性还是非多重性  31.3 结论  第32章 OBSERVER——演化至模式  32.1 数字时钟  32.2 OBSERVER模式  32.2.1 模型  32.2.2 面向对象设计原则的运用  32.3 结论  32.4 参考文献  第33章 ABSTRACTSERVER模式、ADAPTER模式和BRIDGE模式  33.1 ABSTRACTSERVER模式  33.2 ADAPTER模式  33.2.1 类形式的ADAPTER模式 33.2.2 调制解调器问题、适配器以及LSP  33.3 BRIDGE模式 33.4 结论  33.5 参考文献  第34章 PROXY模式和GATEWAY模式:管理第三方API  34.1 PROXY模式  34.1.1 实现PROXY模式  34.1.2 小结  34.2 数据库、中间件以及其他第三方接口  34.3 TABLEDATAGATEWAY  34.3.1 测试和内存TDG  34.3.2 测试DbGateWay  34.4 可以用于数据库的其他模式  34.5 结论  34.6 参考文献  第35章 VISITOR模式  35.1 VISITOR模式  35.2 ACYCLICVISITOR模式  35.3 DECORATOR模式  35.4 EXTENSIONOBJECT模式  35.5 结论  35.6 参考文献  第36章 STATE模式  36.1 嵌套switch/case语句  36.1.1 内部作用域的状态变量  36.1.2 测试动作  36.1.3 代价和收益  36.2 迁移表  36.2.1 使用表解释 36.2.2 代价和收益  36.3 STATE模式 36.3.1 STATE模式和STRATEGY模式  36.3.2 代价和收益  36.4 状态机编译器  36.4.1 SMC生成的Turnstile.cs以及其他支持文件  36.4.2 代价和收益  36.5 状态机应用的场合  36.5.1 作为GUI中的高层应用策略  36.5.2 GUI交互控制器  36.5.3 分布式处理  36.6 结论  36.7 参考文献  第37章 薪水支付案例研究:数据库  37.1 构建数据库  37.2 一个代码设计缺陷  37.3 增加雇员  37.4 事务  37.5 加载Employee对象  37.6 还有什么工作  第38章 薪水支付系统用户界面:Model-View-Presenter  38.1 界面  38.2 实现  38.3 构建窗口  38.4 Payroll窗口  38.5 真面目  38.6 结论  38.7 参考文献  附录A 双公司记  Rufus公司:“日落”项目  Rupert工业公司:“朝晖”项目  附录B 什么是软件  索引

    2012-08-11
    18
  • 领域驱动设计C# 2008实现问题.设计.解决方案

    第1章 介绍项目:smartga系统 1.1 问题 1.2 设计 1.2.1 可靠性和可得性 1.2.2伸缩性 1.2.3 可维护性 1.2.4 富客户应用功能 1.2.5 离线可得 1.2.6 web访问 1.2.7 智能安装和自动更新功能 1.2.8 附加客户设备支持 1.3 解决方案 1.3.1 满足可靠性、可得性、伸缩性、离线可得和附加客户设备支持需求 1.3.2 满足可维护性需求 1.3.3 满足富客户应用功能需求 1.3.4 满足web访问需求 1.3.5 满足智能安装和自动更新功能需求 1.4 总结 第2章 设计分层架构 2.1 问题 .2.2 设计 2.2.1 设计visual studio解决方案 2.2.2 设计基础设施层 2.3 解决方案 2.3.1 实现visual studio解决方案 2.3.2 实现架构层 2.4 总结 第3章 管理项目 3.1 问题 3.2 设计 3.2.1 设计领域模型 3.2.2 定义项目聚合 3.2.3 定义聚合边界 3.2.4 设计仓储 3.2.5 编写单元测试 3.3 解决方案 3.3.1 project类 3.3.2 实现仓储 3.3.3 实现服务类 3.3.4 实现项目信息视图模型 3.3.5 实现项目信息视图 3.4 总结 第4章 公司和联系人 4.1 问题 4.2 设计 4.2.1 设计领域模型 4.2.2 定义company聚合和contact聚合 4.2.3 定义聚合边界 4.2.4 设计仓储 4.2.5 编写单元测试 4.3 解决方案 4.3.1 company类 4.3.2 contact类 4.3.3 projectcontact类 4.3.4 实现仓储 4.3.5 实现服务类 4.3.6 company视图模型 4.3.7 company视图 4.3.8 项目联系人视图模型 4.3.9 项目联系人视图 4.4 总结 第5章 递交传送 5.1 问题 5.2 设计 5.2.1 设计领域模型 5.2.2 定义submittal聚合 5.2.3 定义聚合边界 5.2.4 设计仓储 5.2.5 编写单元测试 5.3 解决方案 5.3.1 实现submittal仓储 5.3.2 实现submittal服务类 5.3.3 submittal视图模型 5.3.4 submittal视图 5.4 总结 第6章 信息请求 6.1 问题 6.2 设计 6.2.1 设计领域模型 6.2.2 定义rfi聚合 6.2.3 定义聚合边界 6.2.4 设计仓储 6.2.5 编写单元测试 6.3 解决方案 6.3.1 实现rfi仓储 6.3.2 实现rfi服务类 6.3.3 rfi视图模型类 6.3.4 rfi视图 6.4 总结 第7章 提案请求 7.1 问题 7.2 设计 7.2.1 设计领域模型 7.2.2 设计提案请求聚合 7.2.3 定义聚合边界 7.2.4 设计仓储 7.2.5 编写单元测试 7.3 解决方案 7.3.1 提案请求类的私有字段和构造器 7.3.2 proposalrequest属性 7.3.3 validate方法 7.3.4 实现提案请求仓储 7.3.5 实现提案请求服务类 7.3.6 提案请求视图模型类 7.3.7 提案请求视图 7.4 总结 第8章更改单 8.1 问题 8.2 设计 8.2.1 设计领域模型 8.2.2 设计更改单聚合 8.2.3 定义聚合边界 8.2.4 设计仓储 8.2.5 编写单元测试 8.3 解决方案 8.3.1 实现更改单仓储 8.3.2 实现更改单服务类 8.3.3 更改单视图模型类 8.3.4 更改单视图 8.4 总结 第9章 施工更改指令 9.1 问题 9.2 设计 9.2.1 设计领域模型 9.2.2 设计施工更改指令聚合 9.2.3 定义聚合边界 9.2.4 设计仓储 9.2.5 编写单元测试 9.3 解决方案 9.3.1 施工更改指令类的私有字段和构造器 9.3.2 实现施工更改指令仓储 9.3.3 实现施工更改指令服务类 9.3.4 施工更改指令视图模型类 9.3.5 施工更改指令视图 9.4 总结 第10章 和服务器同步 10.1 问题 10.2 设计 10.2.1 重新设计工作单元 10.2.2 设计同步 10.2.3 编写单元测试 10.3 解决方案 10.3.1 工作单元重构 10.3.2 和synchronizer类同步 10.4 总结 第11章 客户会员管理系统 11.1 问题 11.2 设计 11.2.1 密码安全 11.2.2 设计客户会员管理系统 11.3 解决方案 11.3.1 客户会员管理系统领域模型类 11.3.2 客户会员管理系统单元测试 11.4 总结

    2012-08-11
    10
  • 领域驱动设计与模式实战

    第一部分 背景知识 第1章 应重视的价值,也是对过去几年的沉重反思 1.1 总体价值 1.2 应重视的架构风格 1.2.1 焦点之一:模型 1.2.2 焦点之二:用例 1.2.3 如果重视模型,就可以使用领域模型模式 1.2.4 慎重处理数据库 1.2.5 领域模型与关系数据库之间的阻抗失配 1.2.6 谨慎处理分布式 1.2.7 消息传递很重要 1.3 对过程的各个组成部分的评价 1.3.1 预先架构设计 1.3.2 领域驱动设计 1.3.3 测试驱动开发 1.3.4 重构 1.3.5 选择一种还是选择组合 1.4 持续集成 1.4.1 解决方案(或至少是正确方向上的一大步) 1.4.2 从我的组织汲取的教训 1.4.3 更多信息 1.5 不要忘记运行机制 1.5.1 有关何时需要运行机制的一个例子 1.5.2 运行机制的一些例子 1.5.3 它不仅仅是我们的过错 1.6 小结 第2章 模式起步 2.1 模式概述 2.1.1 为什么要学习模式 2.1.2 在模式方面要注意哪些事情 2.2 设计模式 2.3 架构模式 2.3.1 示例:层 2.3.2 另一个示例:领域模型模式 2.4 针对具体应用程序类型的设计模式 2.5 领域模式 2.6 小结 第3章 TDD与重构 3.1 TDD 3.1.1 TDD流程 3.1.2 演示 3.1.3 设计效果 3.1.4 问题 3.1.5 下一个阶段 3.2 模拟和桩 3.2.1 典型单元测试 3.2.2 声明独立性 3.2.3 处理困难因素 3.2.4 用测试桩替换协作对象 3.2.5 用模拟对象替换协作对象 3.2.6 设计含义 3.2.7 结论 3.2.8 更多信息 3.3 重构 3.4 小结 第二部分 应用DDD 第4章 新的默认架构 4.1 新的默认架构的基础知识 4.1.1 从以数据库为中心过渡到以领域模型为中心 4.1.2 进一步关注DDD 4.1.3 根据DDD进行分层 4.2 轮廓 4.2.1 领域模型示例的问题/特性 4.2.2 逐个处理特性 4.2.3 到目前为止的领域模型 4.3 初次尝试将UI与领域模型挂接 4.3.1 基本目标 4.3.2 简单UI的当前焦点 4.3.3 为客户列出订单 4.3.4 添加订单 4.3.5 刚才我们看到了什么 4.4 另一个维度 4.4.1 领域模型的位置 4.4.2 孤立或共享的实例 4.4.3 有状态或无状态领域模型实例化 4.4.4 领域模型的完整实例化或子集实例化 4.5 小结 第5章 领域驱动设计进阶 5.1 通过简单的TDD实验来精化领域模型 5.1.1 从Order和OrderFactory的创建开始 5.1.2 一些领域逻辑 5.1.3 第二个任务:OrderRepository+OrderNumber 5.1.4 重建持久化的实体:如何从外部设置值 5.1.5 获取订单列表 5.1.6 该到讨论实体的时候了 5.1.7 再次回到流程上来 5.1.8 总览图 5.1.9 建立OrderRepository的伪实现 5.1.10 简单讨论一下保存 5.1.11 每个订单的总量 5.1.12 历史客户信息 5.1.13 实例的生命周期 5.1.14 订单类型 5.1.15 订单的介绍人 5.2 连贯接口 5.3 小结 第6章 准备基础架构 6.1 将POCO作为工作方式 6.1.1 实体和值对象的PI 6.1.2 是否使用PI 6.1.3 运行时与编译时PI 6.1.4 PI实体/值对象的代价 6.1.5 将PI用于存储库 6.1.6 单组存储库的代价 6.2 对保存场景的处理 6.3 建立伪版本机制 6.3.1 伪版本机制的更多特性 6.3.2 伪版本的实现 6.3.3 影响单元测试 6.4 数据库测试 6.4.1 在每次测试之前重置数据库 6.4.2 在测试运行期间保持数据库的状态 6.4.3 测试之前重置测试所使用的数据 6.4.4 不要忘记不断演变的模式 6.4.5 分离单元测试和数据库调用测试 6.5 查询 6.5.1 单组查询对象 6.5.2 单组查询对象的代价 6.5.3 将查询定位到哪里 6.5.4 再次将聚合作为工具 6.5.5 将规格用于查询 6.5.6 其他查询选择 6.6 小结 第7章 应用规则 7.1 规则的分类 7.2 规则的原则及用法 7.2.1 双向规则检查:可选的(可能的)主动检查,必需的(和自动的)被动检查 7.2.2 所有状态(即使是错误状态)都应该是可保存的 7.2.3 规则应该高效使用 7.2.4 规则应该是可配置的,以便添加自定义规则 7.2.5 规则应与状态放在一起 7.2.6 规则应该具有很高的可测试性 7.2.7 系统应阻止我们进入错的状态 7.3 开始创建API 7.3.1 上下文,上下文,还是上下文 7.3.2 数据库约束 7.3.3 将规则绑定到与领域有关的转换,还是绑定到与基础架构有关的转换 7.3.4 精化原则:所有状态,即使是错误状态,都应该是可保存的 7.4 与持久化有关的基本的规则API的需求 7.4.1 回到已发现的API问题上 7.4.2 问题是什么 7.4.3 我们允许了不正确的转换 7.4.4 如果忘记检查怎么办 7.5 关注与领域有关的规则 7.5.1 需要合作的规则 7.5.2 使用基于集合的处理方法 7.5.3 基于服务的验证 7.5.4 在不应该转换时尝试转换 7.5.5 业务ID 7.5.6 避免问题 7.5.7 再次将聚合作为工具 7.6 扩展API 7.6.1 查询用于设置UI的规则 7.6.2 使注入规则成为可能 7.7 对实现进行精化 7.7.1 一个初步实现 7.7.2 创建规则类,离开最不成熟的阶段 7.7.3 设置规则列表 7.7.4 使用规则列表 7.7.5 处理子列表 7.7.6 一个API改进 7.7.7 自定义 7.7.8 为使用者提供元数据 7.7.9 是否适合用模式来解决此问题 7.7.10 复杂规则又是什么情况 7.8 绑定到持久化抽象 7.8.1 使验证接口成为可插入的 7.8.2 在保存方面实现被动验证的替代解决方案 7.8.3 重用映射元数据 7.9 使用泛型和匿名方法 7.10 其他人都做了什么 7.11 小结 第三部分 应用PoEAA 第8章 用于持久化的基础架构 8.1 持久化基础架构的需求 8.2 将数据存储到哪里 8.2.1 RAM 8.2.2 文件系统 8.2.3 对象数据库 8.2.4 关系数据库 8.2.5 使用一个还是多个资源管理器 8.2.6 其他因素 8.2.7 选择和前进 8.3 方法 8.3.1 自定义手工编码 8.3.2 自定义代码的代码生成 8.3.3 元数据映射(对象关系(O/R)映射工具) 8.3.4 再次选择 8.4 分类 8.4.1 领域模型风格 8.4.2 映射工具风格 8.4.3 起点 8.4.4 API焦点 8.4.5 查询风格 8.4.6 高级数据库支持 8.4.7 其他功能 8.5 另一个分类:基础架构模式 8.5.1 元数据映射:元数据的类型 8.5.2 标识字段 8.5.3 外键映射 8.5.4 嵌入值 8.5.5 继承解决方案 8.5.6 标识映射 8.5.7 操作单元 8.5.8 延迟加载/立即加载 8.5.9 并发控制 8.6 小结 第9章 应用NHibernate 9.1 为什么使用NHibernate 9.2 NHibernate简介 9.2.1 准备 9.2.2 一些映射元数据 9.2.3 一个小的API示例 9.2.4 事务 9.3 持久化基础架构的需求 9.3.1 高级持久化透明 9.3.2 持久化实体的生命周期所需的特定特性 9.3.3 谨慎处理关系数据库 9.4 分类 9.4.1 领域模型风格 9.4.2 映射工具风格 9.4.3 起点 9.4.4 API焦点 9.4.5 查询语言风格 9.4.6 高级数据库支持 9.4.7 其他功能 9.5 另一种分类:基础架构模式 9.5.1 元数据映射:元数据类型 9.5.2 标识字段 9.5.3 外键映射 9.5.4 嵌入值 9.5.5 继承解决方案 9.5.6 标识映射 9.5.7 操作单元 9.5.8 延迟加载/立即加载 9.5.9 并发性控制 9.5.10 额外功能:验证挂钩 9.6 NHibernate和DDD 9.6.1 程序集概览 9.6.2 ISession和存储库 9.6.3 ISession、存储库和事务 9.6.4 得到了什么结果 9.7 小结 第四部分 下一步骤 第10章 博采其他设计技术 10.1 上下文为王 10.1.1 层和分区 10.1.2 分区的原因 10.1.3 限界上下文 10.1.4 限界上下文与分区有何关联 10.1.5 向上扩展DDD项目 10.1.6 为什么对领域模型——SO分区 10.2 SOA简介 10.2.1 什么是SOA 10.2.2 为什么需要SOA 10.2.3 SOA有什么不同 10.2.4 什么是服务 10.2.5 服务中包括什么 10.2.6 深入分析4条原则 10.2.7 再来看一下什么是服务 10.2.8 OO在SOA中的定位 10.2.9 客户-服务器和SOA 10.2.10 单向异步消息传递 10.2.11 SOA如何提高可伸缩性 10.2.12 SOA服务的设计 10.2.13 服务之间如何交互 10.2.14 SOA和不可用的服务 10.2.15 复杂的消息传递处理 10.2.16 服务的可伸缩性 10.2.17 小结 10.3 控制反转和依赖注入 10.3.1 任何对象都不是孤岛 10.3.2 工厂、注册类和服务定位器 10.3.3 构造方法依赖注入 10.3.4 setter依赖注入 10.3.5 控制反转 10.3.6 使用了Spring.NET框架的依赖注入 10.3.7 利用PicoContainer.NET进行自动装配 10.3.8 嵌套容器 10.3.9 服务定位器与依赖注入的比较 10.3.10 小结 10.4 面向方面编程 10.4.1 热门话题有哪些 10.4.2 AOP术语定义 10.4.3 .NET中的AOP 10.4.4 小结 10.5 小结 第11章 关注UI 11.1 提前结语 11.2 模型-视图-控制器模式 11.2.1 示例:Joe的Shoe Shop程序 11.2.2 通过适配器简化视图界面 11.2.3 将控制器从视图解耦 11.2.4 将视图和控制器结合起来 11.2.5 是否值得使用MVC 11.3 测试驱动的Web窗体 11.3.1 背景 11.3.2 一个示例 11.3.3 领域模型 11.3.4 GUI的TDD 11.3.5 Web窗体实现 11.3.6 小结 11.3.7 用NMock创建模拟 11.4 映射和包装 11.4.1 映射和包装 11.4.2 用表示模型来包装领域模型 11.4.3 将表示模型映射到领域模型 11.4.4 管理关系 11.4.5 状态问题 11.4.6 最后的想法 11.5 小结 11.6 结束语 第五部分 附录 附录A 其他领域模型风格 附录B 已讨论的模式的目录

    2012-08-09
    36
img
haitang357

关注 私信