C#.Net快速开发框架 - ORM ,BLL,DAL三者关系
作者:C/S原创  发布日期:2011/04/11 21:38:01
  C#.Net快速开发框架 - ORM ,BLL,DAL三者关系

C#.Net快速开发框架 - ORM ,BLL,DAL三者关系


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。

参考按钮事件写法:


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框架网




C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


上一篇 下一篇