C#方案分层说明

二、项目分层的基本方法
1、项目需要的核心层?
【1】UI表示层: 获取用户信息、向用户展示数据
【2】DAL数据访问层:主要用来操作数据(可以是数据库(关系型数据库、非关系型)、也可以是其他的数据源
   就是各种CRUD方法。就是具体的一个数据操作。
   主要任务:执行数据操作,不参与业务处理。
   常用的类:通用数据访问类、一般数据访问类

【3】BLL业务逻辑层:主要是介于UI和DAL之间,在业务复杂情况下处理具体的业务问题。相当于公司的中层管理
   主要任务:第一、传递数据(不需要处理的情况下)第二、业务处理(算法封装、业务计算)
   常用的类:和一般数据访问类对应的业务逻辑类、特别封装的相关业务类(主要靠经验)
   特别注意:在业务逻辑中,是不能操作控件的。
公司的组织结构:领导层----》中层管理-------->基层员工
【4】接口层:专门封装业务接口,或者数据接口。
【5】服务层:API接口,主要是对外提供服务的,分布式开发中经常用。(可以针对不同的平台开发通用API)
【6】通信层:封装各种通信协议....
【7】实体层:非常重要的,也是必须要有的。主要用来封装数据的。将数据封装成对象,
【8】通用层:放置常用的工具类等。
注意:前面3个必须要有,其他的根据需要添加。

建议:每个层,都独立一个dll类库文件。

2、项目分层设计实践
【1】添加BLL、DAL、UI三部分
【2】DAL中添加:通用数据访问类、一般数据访问类
publicintAddProduct(stringproductld,stringproductName,double unitPrice,string unit,int discount,int categoryld)
{
 //定义SQL语句
 stringsql="insertinto Products(ProductldProductName,UnitPrice,Unit,Discount,cateqoryld)"
 sgl+="values(@Productld,@ProductName,@UnitPrice,@Unit,@Discount,@ categoryld)";
 //封装参数
 SqlParameter[ param = new SqlParameter[]
 {
  new SqlParameter("@Productld", productld),
  new SqlParameter("@ProductName", productName),
  new SglParameter("@UnitPrice", unitPrice),
  new SqlParameter("@Unit", unit),
  new SqlParameter("@Discount",discount),
  new SqlParameter("@categoryld", categoryld),
 };
 //调用通用数据访问类
 return SQLHelper.ExecuteNonQuery(sql,param);
}

通过前面的写法,我们发现参数非常麻烦,尤其是多的时候,很容易出错。
这时候我们想到了,基于对象编程,一切皆对象,我们应该把参数以对象形式传递过来。
这时候就出现了实体类!
【实体类】
【1】特点:只有属性的类,并且属性名称和类型和对应的数据表是一致的。也就是数据表的映射。
   数据表名称--> 实体类名称 (多有多少张数据表,一般就有多少个实体类)
   数据表字段名--> 实体类属性名
   数据表字段类型-->实体类属性类型 (int-->int; varchar、char等所有文本类型-->string)

【2】用途:第一、封装数据(就是把用户输入的数据,或DAL中查询的数据,封装到实体对应的属性中)
     第二、传递数据(从UI中把数据传给下一层、或者从下一层数据封装好以后,传递到上一层)
【3】扩展:我们后面可以根据需要,适当的增加实体类的属性,比如多表链接查询就会用到(放到项目中)

项目之间的引用:
DAL-->DataModels
BLL-->DAL+DataModels
UI-->BLL +DataModels

强化对象之间数据传递过程:

1.通过UI封装对象,也就是把用户输入的数据,封装到对象相应的属性中。这样的话,对象作为一个整体非常容易传递
2.从UI中将实体对象传递到业务层,业务成层继续传到数据层。
3.数据层将实体中的属性所包含的数据解析出来,封装到SQL的参数中。
4.调用通用的数据访问类,执行SOI语句,执行完毕后,再返回数据,过程正好是相反的。4-->3-->2-->1

实现对象的修改,和添加的过程是完全一样的,大家可以参考预科,自己独立完成。包括删除对象。
实现修改和删除的时候要特别注意:必须要有主键参数。
提醒:主键值一般是不能修改的。不允许用户修改。

查询过程封装总结:
1.在对应的数据访问类中,编写查询方法,将查询结果通过循环封装到对象集合中。
2.对象集合到达业务逻辑,处理后,传递到UI
3.UI使用集合展示数据。

DataGridView显示数据,绑定需要三个内容:

1.dgv列标题:显示文本,一般中文
2.dgv--属性绑定:DataPropertyName
3.dgv列名称:Name

实体属性的扩展:
原因:当我们查询时候,经常会遇到不同的数据表联合查询,但是我们的实体类是针对一个表完成的,我可以使用扩展实体
方法:在现有的实体中,增加需要的相关属性即可。
建议:如果你的查询显示内容,经常变换,在winform程序中,可以适当使用DataTable或DataSet
学习作业:在录播中,我专门讲了“组合扩展实体”。

总结:一般项目我们使用三层结构完全解决。
1、首先设计好数据库
2、根据数据库设计各种实体类。
3、根据实体类添加对应的数据访问类(一般有多少个实体类,就会有多少个数据访问类)
4、根据数据访问类添加业务逻辑类。(实际开发中,一个业务逻辑类,可能对应多个数据访问类)
5、特别注意模块之间的引用关系。

posted on 2023-01-31 15:58  manber  阅读(445)  评论(0)    收藏  举报

导航