(转)ASP.NET 常见参考项目的 UI、BLL 、Model 、 DAL 分析
应用/项目名称 | UI层实现 | Business Model & Logic Layer 实现 | Data Access Layer 实现 |
Personal Web Site Starter Kit | 在ASP.NET页面上直接利用 ObjectDataSource 来绑定 PhotoManager 中的方法来获取数据、更新数据 | 两个数据实体类(Album、Photo),一个管理类(PhotoManager) 自行解决数据库连接、使用 SqlCommand 来调用存储过程来完成 |
|
Club Web Site Starter Kit | 在ASP.NET页面上直接利用 SqlDataSource 来获取数据、更新数据 | 只有一些简单的 Helper/Utility类,业务逻辑大多在页面上实现 | 有一个DataSet,提取 Member表的数据,在自己的数据库中扩充了 SqlMembershipProvider的字段 |
Classifieds Site Starter Kit | 在ASP.NET页面上,增/删/改主要是利用FormView调用BLL中的ModelDB来实现,数据列表主要利用ModelCache的List |
1) BLL中实现了 ModelDB的类,调用DAL中的DataSet来进行数据更新,如果是查询数据(GetModelList),则得到 ModelDataComponent.ModelDataTable,这是数据集自动生成代码中的一个类 2) 在 App_Code 的Web目录中,主要实现了部分实体在 HTTP Context中的Cache功能,建立了 CachedModel(数据实体类)及其管理对象 ModelCache,后者主要是将BLL层的ModelDB的Retrive结果DataTable转成 List |
全是ASP.NET 2.0 中的DataSet,实现了所有表数据的获取与更新,它是调用存储过程来实现的 |
Commerce Starter Kit | 在ASP.NET页面上,有一些是直接调用 ModelManager对象来完成用户交互,有一些则是利用 ObjectDataSource 绑定 ModelManager 来达到同样功能 对于某些操作,如果没有对应的 ModelManager 则直接使用 SqlDataSource |
1) 在Objects目录下,定义了数据实体类,包含所有属性的Get/Set方法的定义,没有实例化方法,而是使用 void Load(IDataReader)来初始化,其中有一个对象(ShoppingCartItems),则继承至DataTable,利用BuildDataTable()来进行初始化 2) 利用数个 ModelProvider 将与数据库的主要交互功能封装起来,提供了实体层次的CRUD 3) 在 BLL 目录下,有数个 ModelManager,提供从业务层面对 Model 的操作,其中主要是调用 ModelProvider来完成具体的操作 |
在 ModelProvider项目中中,先定义ModelProvider抽象类,再由 SqlModelProvider 来继承,后者中利用 SqlHelper 来完成数据访问,主要是调用存储过程 |
Duwamish 7.1 (.NET 1.1) |
调用BusinessFacade中的 OrderSystem 和 ProductSystem 中的方法完成用户交互,这主要是调用DAL层的相关对象来完成的 | 1) ModelData,继承自System.Data.DataSet,在构造函数里调用BuildDataTables()来初始化一个DataTable用来存储Model数据 2) 在BusinessFacade和BusinessRule中,实现了与业务逻辑有关的内容,调用数据层的 Models 来完成数据访问 |
实现了数个 Models对象,提供了对于 ModelData的CRUD方法,它也是调用 SqlHelper 来完成与数据库的交互 |
Jobs Site Starter Kit | 利用 ObjectDataSource 绑定 Model 类,Command 主要是调用 Model 的 CRUD方法 | 在 Model 对象中定义了所有属性和CRUD方法,实现时调用了 DAL 的 DBAccess 对象,也使用了诸如 SqlParameter 等对象 | 只有一个类 DBAccess ,属于工具类,类似于 SqlHelper,它是利用 System.Data.SqlClient 来实现的,如果向其他数据库移植,代码量不大 |
Timer Tracker Starter Kit | 利用 ObjectDataSource 绑定 Model 类,Command 主要是调用 Model 的 CRUD方法 | 在 Model 对象中定义了所有属性和CRUD方法 | DataAccess:抽象类,定义了DAL层需要实现所有 Model 的 CRUD 对应的数据访问方法 DataAccessHelper:工厂类,利用配置创建相应的 DataAccess 对象 SqlDataAccess:DataAccess 的 SQL Server 实现,其中也包含一些类似于SqlHelper 的通用方法以简化代码 |
.Text 0.95 (.NET 1.1) |
大多数是调用 Model有直接调用 SqlDataProvider 来获取数据、更新数据 | 在Dottext.Framework 的 Component 中定义了业务实体 Model 和 ModelCollection,在在Dottext.Framework定义了 Models 类,主要用提供 Model 的 CRUD 方法,其中的 R 返回 ModelCollection | 在Dottext.Framework 的 Data 中定义了 IDbProvider和 IDTOProvider 接口,然后提供了 DataDTOProvider 和 SqlDbProvider 的实现,其中调用了 SqlHelper 类 |
Community Server 2.1 SDK (.NET 1.1 & 2.0) |
直接调用 Models 的方法来获取数据、更新数据等 | 在 CommunityServerComponents 项目的 Components 中定义 Model 类,其中仅包含属性定义及构造函数,另外定义了 Models 类,其中实现了 Model 的 CRUD 方法,它是调用 Provider 下的 CommonDataProvider 来完成数据访问的 | 在 CommunityServerComponents 项目的 Proivder 中,利用抽象类CommonDataProvider 定义了所有 BLL & Model 层需要的数据访问方法,然后在 SqlDataProvider 中项目中使用 SqlDataProvider 继承此类,完成与 SQL Server 数据库的交互 |
.Pet Shop 4.0 | 在 asp.net 的页面上,大多是利用代码来调用 BLL 层的 Model 对象来获取数据、更新数据 | Model 项目 中定义了所有的业务实体 ModelInfo BLL 项目中定义业务实体 Model ,其中包含业务视角的 CRUD 方法,它们是调用 IDAL 中的 IModel 的 CRUD 方法来实现的 |
IDAL 项目中有多个接口定义 IModel,其中定义了需要实现的 Model 的 CRUD 方法 SqlServerDAL 和 OracleDAL 分别在两种数据库上实现了 IDAL DALFactory 为工厂类,负责根据配置返回相应的 IDAL 的 IModel 实现类 DBUtility 是 SQL Server 和 Oracle 数据库操作的工具类,主要是 SQLHelper 和 OracleHelper |
简单个人评价:
- Personal Web Site Starter Kit:简单,供初学者参考之用
- Club Web Site Starter Kit:对标准 MemberShip 的扩充值得一看
- Classifieds Site Starter Kit:结构较为清晰,利用 DataSet 简化了大量 SQL 代码的编写
- Commerce Starter Kit: 利用了 Provider 模型,有些小瑕疵,如界UI层有 SqlDataSource,Model 中有 DataTable
- Duwamish 7.1:架构比较清晰,但Model 继承自 DataSet ,因此其 BuildDataTables 和 Models 中的CURD 方法较为麻烦,代码量较大
- Jobs Site Starter Kit:简单实用,有些缺点,如 Model 的 CRUD 方法的 SqlParameter 造成 BLL 和 DAL 无法完全隔离
- Timer Tracker Starter Kit:一种架构清晰、较好的实现模式,只是代码量稍大
- .Text 0.95:基于 .NET 1.1 ,因此 BLL 层稍显复杂,DAL 层代码量也较大
- Community Server 2.1:它同时兼容 .NET 1.1 和 .NET 2.0 ,因此没有利用 .NET 2.0 的许多特性,但其 Provider 的模式较为清晰
- .Pet Shop 4.0:架构清晰