C# Design Patterns (4) - Proxy
2009-07-06 07:07:20 来源:WEB开发网核心提示: 代理的主要目的之一,是把复杂性封装起来,C# Design Patterns (4) - Proxy(5),让客户端程序在引用上更容易,而不需要顾虑藏在身后这些复杂的逻辑,并将这些动作都搬移至 DbContext 类去处理,以另一种设计理念实现了 Proxy Pattern,如上方这个示例
代理的主要目的之一,是把复杂性封装起来,让客户端程序在引用上更容易,而不需要顾虑藏在身后这些复杂的逻辑。如上方这个示例,我们可以把「载入图片、绘制图片在屏幕上」这些较复杂的 .NET API 引用代码,都封装在「被代理者」这个真实 Image 对象的几个自定义方法里。
此外,我们也可用相同于本示例的逻辑,去实现「保护代理 (Protection Proxy)」的观念,例如要求用户必须输入正确的密码、先通过认证 (Authentication) 后,才能访问 RealSubject 对象、调用其方法。相关的范例,有兴趣的读者可自行去「C# 3.0 Design Patterns」这本书籍的 O'Reilly 英文官方网站上 [9],下载第二章的源代码。
接下来的第三个示例,为「数据访问代理」的 ASP.NET 例子 [10], [12],用来取得 Northwind 数据库中 Employees 表的记录总数。其类图如下图 4,和本帖第一、第二个示例的类图略有不同,它是将 RealSubject、Proxy 合而为一,变成单一个 DbCommandProxy 类;其左侧的 DbContext 类只是用来协助解决复杂性的问题,包括取得 Web.config 的数据库连接字符串、建立数据库的连接。
这个 DbCommandProxy 类,实现了 .NET 用来执行 SQL 语句的原生 IDbCommand 接口 [6]。我们为了将复杂性问题、具体的数据库连接方式隔离出来,因此另外提供了一个 DbContext 类,并将这些动作都搬移至 DbContext 类去处理,以另一种设计理念实现了 Proxy Pattern。
图片看不清楚?请点击这里查看原图(大图)。
[]
更多精彩
赞助商链接