asp.net设计模式(Microsoft 首席程序经理,MVP作序推荐)
谁适合读本书呢?
本书涵盖了开发企业级ASP.NET应用程序的知名模式和最佳实践,如果您熟悉.NET框架,想了解如何改进编码方式,如何运用设计模式、设计原则和最佳实践来提高代码的可维护性和适应性,请别错过本书哦!
那些以前已经体验过设计模式的读者可能希望跳过本书的第Ⅰ部分,这部分介绍了GoF提出的设计模式以及其他常见设计原则,包括S.O.L.I.D原则和Martin Fowler的企业设计模式。所有的代码示例均采用C#语言编写,但这些概念可以非常轻松地用于VB.NET。
内容简介:
本书涵盖了开发企业级ASP.NET应用程序的知名模式和最佳实践。本书用到的模式可以用于从ASP.NET 1.0到ASP.NET 4.0的任何版本。不必管模式本身所用的语言,可以将模式用于任何面向对象编程语言。
作者介绍:
Scott Millett是一位就职于伦敦Wiggle.co.uk公司的企业软件架构师,Wiggle.co.uk是一家专门从事自行车和铁人三项体育运动业务的电子商务公司。他从1.0版就开始从事.NET开发,并于2010年被授予ASP.NET MVP称号。他还是Wrox出版社出版的Professional Enterprise .NET一书的作者之一。在从事.NET写作和开发工作之余,他会参加格拉斯顿伯里音乐节以及夏季英国所有的大型音乐节,放松一下,欣赏音乐。如果希望与Scott讨论本书或任何与.NET开发有关的话题,或英国音乐节实况,那可以给他的邮箱scott@elbandit.co.uk发邮件,或访问他的Tweet账号@ScottMillett。
结构安排
本书既可以作为一个分步推进的指南,也可以作为闲暇时随意翻阅的常备参考书。本书分为3个部分。第Ⅰ部分介绍了模式和设计原则。第Ⅱ部分讲解如何在ASP.NET应用程序的不同层中使用模式和原则。第Ⅲ部分展示了一个完整的研究案例,用来演示本书涵盖的多个模式。既可以在阅读研究案例之前通读各章内容;也可以首先阅读研究案例,然后在涉及具体的模式和原则时再回过头来查阅第Ⅱ部分以获取更详细的内容,这种紧密结合实际的方法可能会让学习过程变得更加轻松。
第Ⅰ部分 模式与设计原则
本书第Ⅰ部分首先介绍设计模式概念、企业模式及设计原则,包括S.O.L.I.D.设计原则。
第1章:成功应用程序的模式
该章研究了专业开发者为何需要理解设计模式和原则,以及(更重要的是)如何在实际的企业级应用程序中加以利用。该章讲解了GoF设计模式的起源、它们在当今世界中的关联性以及与具体编程语言脱钩。然后浏览了一些常见设计原则和S.O.L.I.D.设计原则,最后描述了Fowler的企业模式。
第2章:剖析模式的模式
该章介绍了使用模式模板所需的实用知识以及如何利用设计模板来阅读GoF设计模式。然后将教您如何理解设计模式分类,并讲解如何选择和应用设计模式。最后给出了一个示例来演示如何重构现有的代码,以便使用设计模式和原则来提升可维护性。
第Ⅱ部分 剖析ASP.NET应用程序:学习并应用模式
本书的第Ⅱ部分演示如何将前两章介绍的模式和原则运用到企业级ASP.NET应用程序的各个层次中。
第3章:应用程序分层与关注点分离
该章描述了分层设计与传统的ASP.NET Web表单代码隐藏模型相比所具有的优势。该章继续讲解逻辑分层和应用程序关注点分离的概念。然后定义了企业级ASP.NET应用程序中各个不同层次的职责,这部分的其他几章将讨论这些层次。该章最后是一个练习,将一个Smart UI反模式按照分层体系结构方法进行重构。
第4章:业务逻辑层:组织
该章涵盖了为组织业务逻辑层而设计的模式。该章首先描述了Transaction Script模式;然后是Active Record模式,并利用一个使用Castle Windsor项目的练习来演示该模式;最后一个模式是Domain Model模式,用NHibernate练习进行演示。该章最后评论了领域驱动设计(domain-driven design,DDD)方法学,以及如何运用该方法学将精力集中在业务逻辑而非基础设施。
第5章:业务逻辑层:模式
第5章与第4章类似,仍然介绍业务层,但该章关注的是构建对象时可以使用的模式和原则,以及如何确保构建可伸缩、可维护的应用程序。该章涉及的模式包括Factory、Decorator、Template、State、Strategy和Composite。所涉及的企业模式包括Specification和Layer Supertype。最后介绍了一些能够改进代码可维护性和灵活性的设计原则,包括Dependency Injection、Interface Segregation和Liskov Substitution原则。
第6章:服务层
该章介绍了服务层在企业ASP.NET应用程序中扮演的角色。该章首先简要地介绍了Service Oriented Architecture及其必要性。然后讨论了Façade设计模式。接着讨论了Document Message、Request-Response、Reservation和Idempotent模式等Messaging模式。最后给出了一个WCF实体的练习,来演示本章涵盖的所有模式。
第7章:数据访问层
如何利用数据存储来使业务对象状态持久化是应用程序体系结构的关键部分。该章将学习该层中使用的设计模式,以及如何将它们整合在一起。这里演示了两种帮助组织持久层的数据访问策略:Repository和Data Access Object。接着,介绍了一些有助于优雅地满足数据访问需求的企业模式和原则,包括Lazy Loading、Identity Map、Unit of Work和Query Object。之后介绍了Object Relational Mapper以及它们解决的问题。最后,给出了一个企业Domain Driven练习,它的POCO业务实体同时使用了NHibernate和MS Entity Framework。
第8章:表示层
该章介绍了一些为了组织表示层逻辑并让其与应用程序中的其他层保持分离状态的模式。该章首先解释如何使用Structure Map和Inversion of Control容器将松散耦合的代码连接起来。然后描述了几种表示层模式,包括利用Model-View-Presenter模式和ASP.NET Web表单实现视图,利用Command和Chain of Responsibility模式实现Front Controller表示模式,以及利用ASP.NET MVC框架和Windsor的Castle Monorail框架来实现Model-View-Controller模式。最后讨论的表示层模式是ASP.NET Web表单中使用的PageController。该章最后讲解一种可与组织模式一起使用的ViewModel模式,以及如何利用AutoMapper自动地把领域实体映射到ViewModel。
第9章:用户体验层
在第Ⅱ部分的最后一章介绍用户体验层。该章首先讲解什么是Ajax及其所依赖的技术。然后讲解了JavaScript库,说明如何使用jQuery等强大代码库来简化JavaScript处理。该章主要描述了一些常见的Ajax模式:Ajax Periodic Refresh和Timeout模式,用于维护历史的Unique URL模式,用于实现客户端数据绑定的Jtemplate模式,以及Ajax Predictive Fetch模式。
第Ⅲ部分 案例研究:在线电子商务商店
本书最后一部分使用一个完整的示例应用程序来演示在第Ⅱ部分中介绍的众多模式。
第10章:需求和基础设施
这是关于案例研究的第1章,介绍了将在其余4章中构建的Agatha电子商务商店。该章描述了该网站的需求,以及将要用到的基础设施和总体架构。表示层采用ASP.MVC,中间层的组织采用领域模型,利用NHibernate使业务实体持久化并从数据库中检索业务实体。
第11章:创建商品目录
该章构建了商店的商品目录浏览功能。大量使用jQuery来提供丰富的Web 2.0观感。利用JSON来实现控件和ASPX视图之间的通信以提供Ajax功能。使用ViewModel为控件提供扁平的领域视图。采用AutoMapper自动地把领域实体转换成ViewModel。
第12章:实现购物车
该章实现了顾客购物车。使用顾客Cookie来存放购物车内容摘要,创建一项服务将访问Cookie存储的逻辑抽象出来。为了保持Web 2.0观感,购物车上执行的所有动作均通过Ajax调用进行。
第13章:顾客会员
该章解决顾客会员资格和身份验证问题。使用ASP.NET用户凭据提供者进行就地身份验证;但也使用了第二种身份验证方法,让顾客使用其现有的基于Web的账号(比如Facebook和Google账号)来进行身份验证。本章还会开发顾客账号屏幕。
第14章:订购与支付
在案例研究练习的最后一章中,将研究该网站的支付和结账功能。本章选中的支付机制是PayPal,但把逻辑代码抽象出来,这样就可以轻易地将其替换成任何其他支付手段。最后向顾客的账号部分中添加订单历史记录功能。
目 录
第Ⅰ部分 模式与设计原则
第1章 成功应用程序的模式.. 3
1.1 设计模式释义... 3
1.1.1 起源... 4
1.1.2 必要性... 4
1.1.3 有效性... 4
1.1.4 局限性... 5
1.2 设计原则... 5
1.2.1 常见设计原则... 5
1.2.2 S.O.L.I.D.设计原则... 6
1.3 Fowler的企业设计模式... 7
1.3.1 分层... 7
1.3.2 领域逻辑模式... 7
1.3.3 对象关系映射... 8
1.3.4 Web表示模式... 9
1.3.5 基本模式、行为模式和结构模式... 9
1.4 其他有名的设计实践... 10
1.4.1 测试驱动设计... 10
1.4.2 领域驱动设计... 10
1.4.3 行为驱动设计... 10
1.5 小结... 11
第2章 剖析模式的模式.. 13
2.1 如何阅读设计模式... 13
2.1.1 GoF模式模板... 13
2.1.2 简化模板... 14
2.2 设计模式分组... 14
2.2.1 创建型... 14
2.2.2 结构型... 15
2.2.3 行为型... 15
2.3 如何选择和运用设计模式... 16
2.4 快速模式示例... 17
2.4.1 根据设计原则进行重构... 19
2.4.2 根据Adapter模式进行重构... 21
2.4.3 利用企业模式... 24
2.5 小结... 25
第Ⅱ部分 剖析ASP.NET应用程序:
学习并应用模式
第3章 应用程序分层与关注点分离.. 29
3.1 应用程序体系结构与设计... 29
3.1.1 反模式:智能UI 29
3.1.2 分离关注点... 35
3.2 小结... 51
第4章 业务逻辑层:组织.. 53
4.1 理解业务组织模式... 53
4.1.1 Transaction Script 53
4.1.2 Active Record. 55
4.1.3 Domain Model 65
4.1.4 Anemic Domain Model 86
4.1.5 领域驱动设计... 88
4.2 小结... 91
第5章 业务逻辑层:模式.. 93
5.1 应用设计模式... 93
5.1.1 Factory Method模式... 93
5.1.2 Decorator模式... 97
5.1.3 Template Method模式... 103
5.1.4 State模式... 107
5.1.5 Strategy模式... 113
5.2 应用企业模式... 117
5.2.1 Specification模式... 117
5.2.2 Composite模式... 119
5.2.3 Layer Supertype模式... 124
5.3 应用设计原则... 127
5.3.1 依赖倒置原则和依赖注入模式... 127
5.3.2 接口分离原则... 133
5.3.3 里氏替换原则... 137
5.4 小结... 147
第6章 服务层.. 149
6.1 服务层介绍... 149
6.1.1 SOA.. 149
6.1.2 SOA的4项信条... 152
6.1.3 Facade设计模式... 152
6.2 应用Messaging模式... 153
6.2.1 Document Message和
Request-Response模式... 154
6.2.2 Reservation模式... 155
6.2.3 Idempotent模式... 156
6.3 SOA示例... 156
6.3.1 领域模型和资源库... 157
6.3.2 服务层... 166
6.3.3 客户端代理... 180
6.3.4 客户端... 183
6.4 小结... 187
第7章 数据访问层.. 189
7.1 DAL介绍... 189
7.2 数据访问策略... 189
7.2.1 Repository模式... 190
7.2.2 Data Access Objects模式... 191
7.3 数据访问模式... 191
7.3.1 Unit of Work模式... 191
7.3.2 数据并发控制... 198
7.3.3 Lazy Loading和Proxy模式... 201
7.3.4 Identity Map模式... 206
7.3.5 Query Object模式... 208
7.4 使用对象关系映射器... 218
7.4.1 NHibernate. 219
7.4.2 MS Entity Framework. 219
7.4.3 ORM代码示例... 219
7.5 小结... 280
第8章 表示层.. 283
8.1 反转控制... 283
8.1.1 Factory Method设计模式... 283
8.1.2 Service Locator 285
8.1.3 IoC容器... 286
8.1.4 StructureMap. 286
8.2 Model-View-Presenter 290
8.3 Front Controller 313
8.3.1 Command模式... 314
8.3.2 Chain of Responsibility模式... 336
8.4 Model-View-Controller 344
8.4.1 ViewModel模式... 344
8.4.2 ASP.NET MVC框架... 345
8.4.3 利用AutoMapper映射ViewModel 357
8.4.4 Castle MonoRail 362
8.5 Page Controller模式... 369
8.6 小结... 370
第9章 用户体验层.. 371
9.1 什么是AJAX.. 371
9.2 使用JavaScript库... 372
9.3 理解AJAX模式... 372
9.3.1 Periodic Refresh和Timeout 372
9.3.2 Unique URL. 390
9.3.3 利用JavaScript. Template实现数据
绑定... 390
9.3.4 Predictive Fetch. 408
9.4 小结... 414
第Ⅲ部分 案例研究:
在线电子商务商店
第10章 需求和基础设施.. 417
10.1 Agatha服装店需求... 417
10.1.1 Product Catalog和Basket截屏... 418
10.1.2 顾客账号屏幕... 420
10.1.3 结账屏幕... 422
10.1.4 缓存和日志... 423
10.2 架构... 423
10.3 小结... 443
第11章 创建商品目录.. 445
11.1 创建产品目录... 445
11.1.1 Product Catalog模型... 445
11.1.2 Product Catalog数据表... 450
11.1.3 Product Catalog资源库... 451
11.1.4 Product服务... 465
11.1.5 控制器... 480
11.1.6 Product Catalog视图... 490
11.1.7 设置IoC. 513
11.2 小结... 516
第12章 实现购物车.. 519
12.1 实现购物车... 519
12.1.1 Basket领域模型... 519
12.1.2 创建购物车数据表... 529
12.1.3 NHibernate映射... 530
12.1.4 购物车服务... 533
12.1.5 购物车控制器和购物车视图... 543
12.2 小结... 565
第13章 顾客会员.. 567
13.1 顾客会员... 567
13.1.1 Customer模型... 568
13.1.2 Customer数据表... 573
13.1.3 Customer NHibernate映射... 573
13.1.4 Customer服务... 576
13.1.5 身份验证服务... 585
13.1.6 Customer控制器... 593
13.1.7 Account控制器... 597
13.1.8 顾客关系视图... 607
13.1.9 身份验证视图... 611
13.2 小结... 617
第14章 订购和支付.. 619
14.1 结账... 619
14.1.1 Order模型... 620
14.1.2 Order数据表... 635
14.1.3 Order NHibernate映射... 636
14.1.4 Order服务... 639
14.1.5 利用PalPay进行支付... 648
14.1.6 Order、Payment与Checkout
控制器... 657
14.1.7 Order和Checkout视图... 666
14.2 小结... 676