C#.Net快速开发框架 - ORM ,BLL,DAL三者关系
C#.Net快速开发框架 - ORM ,BLL,DAL三者关系
ORM (Object/Relation Mapping) 对象关系映射
BLL (Business Logic Layer) 业务逻辑层
DAL (Data Access Layer) 数据存取层(数据访问层/数据层)
ORM在开发框架中的作用:
BLL和DAL,这是系统分层后的必然结果,分层有若干好处,特别是易于维护和扩展。CSFramework框架分离了DAL层,若要更换不同类型的数据库,如Oracle,修改DAL层即可。
上面介绍了ORM,BLL以及业务逻辑分层在开发框架中起到的作用,ORM,BLL,DAL三者关系图:
ClassGenerator自动生成的ORM代码:
扫一扫加微信
ORM (Object/Relation Mapping) 对象关系映射
BLL (Business Logic Layer) 业务逻辑层
DAL (Data Access Layer) 数据存取层(数据访问层/数据层)
ORM在开发框架中的作用:
CSFramework.ORM主要目的是给SQL命令生成器自动生成SQL命令(DbCommand),用于自动提交数据。将数据表结构映射为C#类,每个字段在类中定义为字符类型常量,在DAL层,以数据表+字段名称组合SQL语句,使用类的常量来规范代码的严谨性。
比如:
C# Code:
/// <summary>
/// 获取所有用户列表
/// </summary>
/// <returns></returns>
public DataTable GetUsers()
{
string sql = "SELECT * FROM [" + TUser.TableName + "]"; //引用用户表的表名
return DataProvider.Instance.GetTable(sql, TUser.TableName);
}
为什么不使用以下写法?
这种写法的目的是一致的,若系统中多个单元使用这张数据表时,如果把这些字段或表名“写死”,当某天更改了字段或表名,是不是要搜索整个解决方案然后替换?
string sql = "select * from [tb_MyUser]";
return DataProvider.Instance.GetTable(sql, "tb_MyUser");
这种写法的目的是一致的,若系统中多个单元使用这张数据表时,如果把这些字段或表名“写死”,当某天更改了字段或表名,是不是要搜索整个解决方案然后替换?
关于UI, BLL,DAL逻辑分层
BLL和DAL,这是系统分层后的必然结果,分层有若干好处,特别是易于维护和扩展。CSFramework框架分离了DAL层,若要更换不同类型的数据库,如Oracle,修改DAL层即可。
若不分层,按钮Click事件直接SQL硬编码的话,您想重构吗?
BLL层能有效分离窗体中冗余的代码和业务逻辑,把窗体(UI层)的代码“搬”进BLL。
BLL层能有效分离窗体中冗余的代码和业务逻辑,把窗体(UI层)的代码“搬”进BLL。
参考按钮事件写法:
C# Code:
private void OnGetData_ButtonClick(object sender, ButtonPressedEventArgs e)
{
DataTable data= _MyBLL.GetBusinessByKey("PONO00001");
//do something...
}
ORM,BLL,DAL三者关系图
上面介绍了ORM,BLL以及业务逻辑分层在开发框架中起到的作用,ORM,BLL,DAL三者关系图:
ClassGenerator自动生成的ORM代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using CSFramework.ORM;
namespace CSFramework3.Models
{
/*==========================================
* 程序说明: tb_PayType的ORM模型
* 作者姓名: C/S框架网 www.csframework.com
* 创建日期: 2011-04-05 12:45:33
* 最后修改: 2011-04-05 12:45:33
*
* 注: 本代码由ClassGenerator自动生成
* 版权所有 C/S框架网 www.csframework.com
*==========================================*/
///<summary>
/// ORM模型, 数据表:tb_PayType,由ClassGenerator自动生成
/// </summary>
[ORM_ObjectClassAttribute("tb_PayType", "PayType", true)]
public sealed class tb_PayType
{
public static string __TableName ="tb_PayType";
public static string __KeyName = "PayType";
[ORM_FieldAttribute(SqlDbType.Int,4,false,false,false,false,false)]
public static string isid = "isid";
[ORM_FieldAttribute(SqlDbType.VarChar,10,false,true,true,false,false)]
public static string PayType = "PayType";
[ORM_FieldAttribute(SqlDbType.NVarChar,40,false,true,false,false,false)]
public static string TypeName = "TypeName";
}
}
// 来源:www.CSFramework.com, C/S框架网
using System.Collections.Generic;
using System.Text;
using System.Data;
using CSFramework.ORM;
namespace CSFramework3.Models
{
/*==========================================
* 程序说明: tb_PayType的ORM模型
* 作者姓名: C/S框架网 www.csframework.com
* 创建日期: 2011-04-05 12:45:33
* 最后修改: 2011-04-05 12:45:33
*
* 注: 本代码由ClassGenerator自动生成
* 版权所有 C/S框架网 www.csframework.com
*==========================================*/
///<summary>
/// ORM模型, 数据表:tb_PayType,由ClassGenerator自动生成
/// </summary>
[ORM_ObjectClassAttribute("tb_PayType", "PayType", true)]
public sealed class tb_PayType
{
public static string __TableName ="tb_PayType";
public static string __KeyName = "PayType";
[ORM_FieldAttribute(SqlDbType.Int,4,false,false,false,false,false)]
public static string isid = "isid";
[ORM_FieldAttribute(SqlDbType.VarChar,10,false,true,true,false,false)]
public static string PayType = "PayType";
[ORM_FieldAttribute(SqlDbType.NVarChar,40,false,true,false,false,false)]
public static string TypeName = "TypeName";
}
}
// 来源:www.CSFramework.com, C/S框架网
扫一扫加微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网