三层架构:
1 划分:1)表现层(UI) 即展现给用户的界面
2)业务逻辑层(BLL) 对数据的操作,加工,对数据业务的逻辑处理以提供合适的数据给UI
3)数据访问层(DAL) 该层是对数据库的直接操作例如增删改查
2 目的: 为实现高内聚,低耦合的思想
3 项目文件架构:
ID |
项目 |
描述 |
用途 |
项目引用关系 |
实例所需文件 |
相关方法 |
1 |
Web |
表现层 |
Web页和控件 |
引用BLL |
WebUI.aspx WebUI.aspx.cs |
GetContent() |
2 |
BLL |
业务逻辑层 |
业务逻辑组件 |
引用 IDAL,Model,使用DALFactory创建实例 |
Content.cs |
ContentInfo GetContentInfo(int id) |
3 |
IDAL |
数据访问层接口定义 |
每个DAL实现都要实现的一组接口 |
引用 Model |
IContent.cs |
ContentInfo GetContentInfo(int id) |
4 |
Model |
业务实体 |
传递各种数据的容器 |
无引用 |
ContentInfo.cs |
|
5 |
DALFactory |
数据层的抽象工厂 |
创建反射,用来确定加载哪一个数据库访问程序集的类 |
引用IDAL,通过读取web.config里设置的程序集,加载类的实例,返回给BLL使用。 |
Content.cs |
IDAL.Icontent create() |
6 |
SQLServerDAL |
SQLServer数据访问层 |
Microsoft SQL Server特定的Pet Shop DAL实现,使用了IDAL接口 |
引用 Model和IDAL,被DALFactory加载的程序集,实现接口里的方法。 |
SqlHelper.cs Content.cs |
SqlDataReader ExecuteReader() PrepareCommand() ContentInfo GetContentInfo(int id) |
OracleDAL |
Oracle数据访问层 |
|||||
7 |
DBUtility |
数据库访问组件基础类 |
GetSqlServerConnectionString得到数据库连接字符串,也可省去该项目,在SQLServerDAL.SqlHelper中用static readonly string SqlConnectionString代替。 |
无引用 |
关系: 外部界面(UI)依赖于业务逻辑层(BLL),业务逻辑层(BLL)从数据访问层(DAL)获取数据并加工后提供给(UI)
实现步骤过程:
1)创建两个解决方案文件夹:1)BLL 2)DAL
2)创建项目的用户界面:例如:空白网站 web---添加窗体-----web窗体
3)创建实体类库 ---model(三层结构依赖实体类model)---在MODEL里添加linq实体类(data0908)----打开实体类库model里的引用下的app.config将连接字符串
如下内容复制到用户界面(UI)里的配置文件里例如(web.config),在<configuration>下复制
<connectionStrings>
<add name="model.Properties.Settings.data0908ConnectionString"
connectionString="Data Source=.;Initial Catalog=data0908;User ID=sa;Password=123"
providerName="System.Data.SqlClient" />
</connectionStrings>
4)在BLL里添加接口声明类库:IBLL, 在DAL里添加接口声明类库IDAL;因为IDAL依赖model实体类库,所以需要在IDAL里引用model
5)在接口声明类库里IDAL里分别添加接口 IDALBASE;
6)进入 接口IDALBASE代码界面,因为不知道接入的是什么类型数据所以用泛型大写<T>来接受,再在里边写方法例如:
namespace IDAL
{
public interface IDALBASE <T> where T:class
{
IQueryable<T> select(); // 1 查全部
T select(string id); // 2 通过id查全部
void insert(T t); // 3 没有返回值直接添加
void update(T t); // 4 没有返回值直接修改
void delete(T t); // 5 没有返回值直接删除
}
}
7 ) (1) 创建连接数据库nation 表的接口 IDALNATION;因为要操作nation表所以需要引用model命名空间,即using model;
(2) 创建连接数据库user表的接口 IDALUSER;因为要操作数据库里的user表所以同样需要引用model命名空间;同时在操作user表中加入另一种操作方法:分页查询即如下所示:
public interface IDAL_USERS:IDALBASE<Users>
{
IQueryable <Users> select(int pagecount, int pageindex);
}
8) 创建IBLL具体的接口 即IBLL_Mainpage 因为DAL依赖BAL和MODEL 所以需要引用他们两个