三层架构及项目搭建
基础概念:
1、三层指的是以下三个应用程序层次结构:
(1) 数据访问层,DAL,用于访问(读写)数据源,并将访问结果返回给业务逻辑层。
(2) 业务逻辑层,BLL,调用数据访问层,实现与业务逻辑相关的具体功能。
(3) 表现层,又称“界面层”,UI,调用业务逻辑层,接受输入或实现输出。
2、模型层:封装业务实体的层次,又称“实体层”,Model。
3、数据源:数据的来源,可以是数据库、文件、XML、Excel表格、集合等等任何可以长期或临时存储数据的位置。并不单单局限于数据库。
4、业务逻辑:与用户需求相关的,软件需实现的具体功能。
知识小结:
1、三层指的是:数据访问层、业务逻辑层、表现层。
2、三层并非三个项目,也并不是固定为四个项目。三层是一种抽象的规范,并未具体定义项目数量上的要求。
3、模型层属于三个层次之间传递数据的工具,其本身并不属于“三层”所属的范畴之内。
4、不考虑其它需要专门引用的程序集,四个项目相互之间的引用关系是:
(1) 模型层:不引用任何其它项目
(2) 数据访问层:引用“模型层”
(3) 业务逻辑层:引用“模型层”和“数据访问层”
(4) 表现层:引用“模型层”和“业务逻辑层”
5、三层架构的优势:
(1) 低耦合,适于变化,利于维护
(2) 模块化,适用于协作开发
三层架构的数据访问层的封装
1、一般来说,实体类中只包含:
(1) 属性的声明
(2) 构造函数的声明
2、一般来说,DBHelper类中推荐包含下列方法:
(1) 连接数据库,并返回连接对象的方法
(2) 手动断开数据库连接的方法
(3) 执行SELECT语句,并返回DataReader或DataSet或DataTable的方法
(4) 执行INSERT、DELETE、UPDATE语句,并返回受影响行数(int)或执行状态(bool),或者不返回值(void)
3、一般来说,数据访问类中推荐包含下列方法:
(1) 执行SELECT语句,依条件进行查询
(a) 参数:条件语句
(b)功能:根据参数条件进行查询
(c)返回值:实体类的泛型集合;没有查询到数据,则返回空集合(集合长度为0,并非null引用)
(2) 执行SELECT语句,依主键进行查询
(a)参数:主键,可以和上面的SELECT方法进行重载
(b)功能:根据参数传入的主键值进行查询
(c)返回值:查询到一行数据,则返回实体对象;没有查询到数据,则返回null
(3) 执行INSERT语句
(a)参数:逐一接收数据表中各字段值为参数,或直接接收实体对象为参数
(b)功能:将参数中包含的各项值插入到数据表中,形成新行
(c)返回值:受影响的行数(int)或执行状态(bool),或者不返回值(void)
(4) 执行DELETE的语句
(a)参数:主键
(b)功能:根据参数传入的主键值,在数据表中删除指定的行
(c)返回值:受影响的行数(int)或执行状态(bool),或者不返回值(void)
(5) 执行UPDATE的语句
(a)参数:逐一接收数据表中各字段值为参数,或直接接收实体对象为参数
(b)功能:以参数中的主键字段为条件,在数据表中更新其它字段的值
(c)返回值:受影响的行数(int)或执行状态(bool),或者不返回值(void)
三层架构的业务逻辑层的封装
1、业务逻辑层调用数据访问层来实现对数据源的访问。但是,并不意味着业务逻辑层的每一个功能都需要通过对数据访问层的调用来实现。例如:你可以通过在业务逻辑层中声明一个将DateTime值转换为特定格式的方法,在界面层中重用时,可以将整个项目中的所有日期、时间的输出格式进行统一规范。
2、业务逻辑层中的代码,不可以直接访问数据源,也不可以直接对界面层的元素进行操作。
3、业务逻辑层要实现的功能由用户需求确定。编码时,需要编写哪些方法,并无统一规范。