l Pet Shop3.0的逻辑模型分为三层,如下图所示:
设计的中心是在表示层使用 ASP.NET Web 窗体,与逻辑中间层中的 C# 业务组件通信。 业务组件继而通过 ADO.NET 和 SQL Server 名为数据访问应用块 (DAAB) (可以从此链接了解更多 DAAB 信息并下载完整的 DAAB 源代码)的帮助器类访问后端数据库。 数据访问功能完全抽象到数据访问层 (DAL) 中,与业务逻辑层 (BLL) 相分离。 .NET Pet Shop 3.0 中的新颖之处在于,我们为 Oracle 9i 和 SQL Server 2000 数据库都引入了 DAL 层。 相应 DAL 层的类加载将根据 Web.Config 中的应用程序配置设置在运行时动态生成。注意 .NET Pet Shop 3.0 使用了两个后端数据库,定单处理中要涉及跨两个数据库的分布式事务。 使用简单的 Web.Config 应用程序设置,用户可以对 .Net Pet Shop 进行部署,使用一个或者多个后端数据库,还可以自由地将 SQL Server 和 Oracle 后端数据库与由 .NET 服务的组件通过 COM+ 企业服务处理的分布式事务混合。
l 体系结构分层如下图所示,接着介绍各部分的含义。
组件 |
介绍 |
ASP.NET Web Forms |
ASP.net的WebForm、Code Behide处理、用户控件、自定义控件和服务器控件等比ASP和JSP FormAction + Html Form的方式在代码结构上更清晰,代码更少。 |
User Interface Processing |
用户状态和购物车状态处理。 |
Business Components |
业务逻辑组件。 |
Enterprise Services |
企业服务组件,主要指分布式自动事务处理。 |
DAL Interface |
所有类型数据库的数据层类必须实现的接口。 |
DAL Factory |
创建某类型的数据访问层实体的工厂类。 |
Oracle DAL |
针对Oracle数据库的数据访问层。 |
Oracle DAAB |
针对Oracle数据库的DAAB1.0的工具类库。 |
SQL Server DAL |
针对SQLserver数据库的数据访问层。 |
SQL DAAB |
针对SQL server数据库的DAAB1.0的工具类库。 |
l 解决方案和资源组织情况如下图所示,接着介绍各项目的含义。
项目 |
用途 |
BLL |
业务逻辑组件存放之处 |
ConfigTool |
用来加密连接字符串和创建事件日志源的管理应用程序 |
DALFactory |
用来确定加载哪一个数据库访问程序集的类 |
IDAL |
每个 DAL 实现都要实现的一组接口 |
Model |
瘦数据类或业务实体 |
OracleDAL |
Oracle 特定的 Pet Shop DAL 实现,使用了 IDAL 接口 |
Post-Build |
运行编译后操作的项目,比如将程序集添加到 GAC 或 COM+ |
Pre-Build |
将程序集从 GAC 删除或从 COM+ 注销程序集的项目 |
SQLServerDAL |
Microsoft SQL Server 特定的 Pet Shop DAL 实现,使用了 IDAL 接口 |
Utility |
一组帮助器类,包括 DPAPI 的封装 |
Web |
Web 页和控件 |
Solution Items |
用来构建应用程序的杂项,比如用来签署应用程序程序集的 Pet Shop.snk 密钥文件 |
l 物理部署Pet Shop3.0,可以采取如下图所示的结构:
这里使用网络负载平衡 (NLB) 或者可能是硬件实现的负载平衡技术将入站的网络通信量分到了两台应用程序服务器上。 在网络请求达到群集中的一台机器时,针对该请求的所有工作都会在这台特定机器上进行。 业务逻辑和数据访问组件将以程序集的形式安装在两台服务器上,它们本质上是完全相同的。 如果负载平衡软件配置为使用“Sticky IP”,则每台服务器都有自己的会话-状态存储,因为要保证第二个请求返回到实现第一个请求的那台服务器。 如果解决方案所需的容错要求更高,两台应用程序服务器可以共享一个公共会话-状态存储比如 SQL Server 或者一台专用的会话服务器(图中没有显示)。 会话-状态存储的类型和位置由每个站点‘web.config’文件里‘system.web’元素‘sessionState’子节点中的值决定。