《应用框架的设计与实现 .NET 平台》
========== ========== ==========
[作者] (美) Xin Chen
[译者] (中) 温昱 靳向阳
[出版] 电子工业出版社
[版次] 2005年07月 第1版
[印次] 2005年07月 第1次 印刷
[定价] 39.80元
========== ========== ==========
【第01章】 【应用框架介绍】
(P004)
使用应用框架有五大优点 : 模块化 (modularity) 、可重用性 (reusability) 、可扩展性 (extensibility) 、简单性 (simplicity) 和可维护性 (maintainability) 。
(P005)
应用框架是精心设计的组件的汇集之处,其中不乏 “久经考验” 的优秀的软件设计方案。
【第02章】 【应用框架解析】
(P019)
通用点、扩展点和设计模式是用于开发框架的技术,黑盒、白盒和灰盒是开发框架的方法。
(P025)
在框架开发中,模板方法包含了业务领域知识,这些业务领域知识规定了不同方法应当如何协作;而抽象方法为模板方法调用的方法提供了客户化实现的手段。
(P028)
为了通过可插入组件来支持扩展点,应用框架必须首先为扩展点定义接口。
(P029)
使用组合法支持扩展点,开发者需要创建可插入的应用组件,该组件的接口要和框架扩展点匹配。通过把应用组件和框架组件绑定在一起,开发者能够将组件插入到扩展点。
【第03章】 【Simplified Application Framework 概览】
(P040)
每个 .NET 应用都以 .NET 框架作为其分层结构的最底层。
(P043)
在 Windows 平台上,启动并持续运行一个应用的最常用手段之一,就是 Windows 服务。
【第05章】 【缓存服务】
(P087)
哈希表要求键是唯一的。如果你视图使用哈希表中已存在的键增加一个对象,则将会抛出一个异常 (exception) 。哈希表中的键相当于数据表中的主关键字或惟一关键字。
(P089)
每个 XML 文档只能有一个根元素,而每个元素可以有多个子元素 (child element) 。
一个元素可以有多个属性,但是多个属性的名字不可重复。
【第06章】 【配置服务】
(P111)
在 .NET 中,配置文件中所有信息都要 “经” IConfigurationSectionHandler 接口读出。
(P112)
配置数据分为两组 : 段处理器 (section handler) 组和段 (section) 组。
(P113)
只定义 <configSections> 但没有 <section> 是允许的,而不定义 <configsections> 只定义 <section> 是不允许的,这时试图运行应用,会收到运行时错误 (run-time error) 。
(P115)
ASP.NET 应用配置文件的原则和非 ASP.NET 应用配置文件的原则 —— 如控制台应用程序,是完全一样的。
【第07章】 【事件通知服务】
(P134)
被封装在委托之内的关于 “方法” 的信息可以分为两部分 : 方法签名 (method signature) 和方法目标 (method target) 。方法签名包括的信息有 : 方法参数的个数和类型,以及返回值 (return value) 类型。方法目标包括的信息有 : 方法名和方法所在对象。
(P135)
在程序中使用委托要做的第一件事是,定义一个委托类,明确说明它能够处理的方法签名。
委托类只有一个构造器,以 “方法目标 (method target)” 作为惟一参数。这其实是把该委托对象绑定到实际的目标。
以构造器中指定的方法目标必须和委托类中定义的方法签名相匹配。
(P138)
当使用委托封装方法调用时,必须从传统的方法调用思想转到面向对象思想上来。
(P139)
通过为委托技术增加异步风格,可以改善应用。
(P140)
BeginInvoke 方法的返回对象也很重要,它返回 AsyncResult 对象,该对象封装了委托方法结果的所有信息,以及方法调用的状态。
(P141)
要获得返回值,必须调用 EndInvoke 并以 BeginInvoke 返回的 AsyncResult 为参数。
EndInvoke 方法的返回值就是目标方法的返回值。
EndInvoke 方法总是返回 object 类型,所以需要对它进行强制类型转换,把它变成目标方法原来的返回值类型。
【第08章】 【“Windows 服务” 服务】
(P166)
为了创建一个新线程,首先要创建一个 ThreadStart 委托。 ThreadStart 指明了在线程启动后需要调用哪些程序代码,也就是说,它把一个线程和一个具体的方法调用捆绑在一起。
ThreadStart 只能接受没有输入参数和没有返回值的方法。
创建 ThreadStart 委托之后,必须将它与一个线程捆绑在一起。
要启动一个线程,只需简单地调用线程中的 Start 方法就可以了。
(P167)
Sleep 是一个静态方法,可以让当前线程休眠一定时间。在线程休眠期间,操作系统不会将 CPU 时间片分配给它。 Sleep 方法通常放在循环处理中,这样可以让线程周期性地工作。
(P168)
Thread.Sleep(-1) 是指这个线程将无限期地等待下去; Thread.Sleep(0) 则令该线程让出一次执行机会给其他线程。用 Thread.Interrupt 方法可以 “唤醒” 一个休眠的线程。这个方法会使休眠的线程抛出 ThreadInterrupted 异常。
(P170)
用 .NET 创建一个 Windows 服务主要包括两步 : 第一,创建一个从 System.ServiceProcess.ServiceBase 继承的服务类;第二,为该服务类创建一个安装项目。
(P173)
Windows 服务项目经过编译后,系统生成一个 “.exe” 文件。
【第12章】 【加密服务】
(P254)
.NET 框架通过 System.Security.Cryptography 命名空间,为加密编程提供了一个综合工具箱 (toolkit) 。 System.Security.Cryptography 包含四种不同的对称加密算法和两种非对称加密算法的实现。
(P255)
.NET 加密功能采用基于流 (stream-based) 的方式实现,加密和解密数据都要使用 System.Security.Cryptography.CryptoStream 类。
当数据经过 CryptoStream 类时,就被加密或解密。