1.简化 接口层(通过主键的多少简化),相信 不会那个 傻逼 的系统 里 的表
1 -100 主键都会出现吧,就算出现了 也就生成出来就是
把,dal 层的配置简化,工程类简化,idal 类个数简化 (主要用泛型和,表的 主键个数,更具上面规则,修改生成器代码或模板)
1.1 无主键
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data;
namespace RHIS.Data.IDAL
{
public partial interface IDalBasic<MODE>
{
#region 成员方法
/// <summary>
/// 增加一条数据
/// </summary>
void Add(MODE model);
/// <summary>
/// 获得增加一条数据的DbCommand
/// </summary>
DbCommand GetAddDbCommand(MODE model);
/// <summary>
/// 获得增加一条数据的DbCommand
/// </summary>
DbCommand GetAddDbCommand(MODE model, Database db);
/// <summary>
/// 更新一条数据
/// </summary>
void Update(MODE model);
/// <summary>
/// 获得更新一条数据的DbCommand
/// </summary>
DbCommand GetUpdateDbCommand(MODE model);
/// <summary>
/// 获得更新一条数据的DbCommand
/// </summary>
DbCommand GetUpdateDbCommand(MODE model, Database db);
/// <summary>
/// 获得数据列表
/// </summary>
DataSet GetList(string strWhere);
/// <summary>
/// 获得查询语句
/// </summary>
/// <returns></returns>
string GetSql(string strWhere);
/// <summary>
/// 获得查询语句条数的语句
/// </summary>
/// <param name="strWhere"></param>
/// <returns></returns>
string GetSqlCount(string strWhere);
/// <summary>
/// 分页获取数据列表
/// </summary>
DataSet GetList(int PageSize, int PageIndex, string strWhere, ref int RowCount);
/// <summary>
/// 获得数据列表(比DataSet效率高,推荐使用)
/// </summary>
List<MODE> GetListArray(string strWhere);
#endregion 成员方法
}
}
1.2 1主键
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
namespace RHIS.Data.IDAL
{
public partial interface IDal_Key1<MODE, KEY> : IDalBasic<MODE>
{
#region 成员方法
/// <summary>
/// 是否存在该记录
/// </summary>
bool Exists(KEY key);
/// <summary>
/// 删除一条数据
/// </summary>
void Delete(KEY key);
/// <summary>
/// 获得删除一条数据的DbCommand
/// </summary>
DbCommand GetDeleteDbCommand(KEY key);
/// <summary>
/// 获得删除一条数据的DbCommand
/// </summary>
DbCommand GetDeleteDbCommand(KEY key, Database db);
/// <summary>
/// 得到一个对象实体
/// </summary>
MODE GetModel(KEY key);
#endregion 成员方法
}
}
1.2.1 一主键含自增 列
using System;
using System.Data;
using System.Data.Common;
using System.Collections.Generic;
using Microsoft.Practices.EnterpriseLibrary.Data;
namespace RHIS.Data.IDAL
{
/// <summary>
/// 接口层IdalTEST_TIGER 的摘要说明。
/// </summary>
public partial interface IDal_Key1_ID<MODE, KEY> : IDal_Key1<MODE, KEY>
{
#region 成员方法
/// <summary>
/// 得到最大ID
/// </summary>
KEY GetMaxId();
#endregion 成员方法
}
}
1.3 两主键
public partial interface IDal_Key2<MODE, KEY1, KEY2> : IDalBasic<MODE>
{
#region 成员方法
/// <summary>
/// 是否存在该记录
/// </summary>
bool Exists(KEY1 key1,KEY2 key2);
/// <summary>
/// 删除一条数据
/// </summary>
void Delete(KEY1 key1,KEY2 key2);
/// <summary>
/// 获得删除一条数据的DbCommand
/// </summary>
DbCommand GetDeleteDbCommand(KEY1 key1,KEY2 key2);
/// <summary>
/// 获得删除一条数据的DbCommand
/// </summary>
DbCommand GetDeleteDbCommand(KEY1 key1,KEY2 key2,Database db);
/// <summary>
/// 得到一个对象实体
/// </summary>
MODE GetModel(KEY1 key1,KEY2 key2);
#endregion 成员方法
}
1.工程层优化
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RHIS.Tools;
using System.Reflection;
namespace RHIS.Data.DALFactory
{
/// <summary>
/// 抽象工厂模式创建DAL。
/// </summary>
public abstract class DataAccess<INTERFACE>
{
private static readonly string _assemblyPath = "RHIS.Data";//动态库文件
/// <summary>
/// 动态库文件
/// </summary>
public static string AssemblyPath
{
get { return _assemblyPath; }
}
private static readonly string _nameSpase = "RHIS.Data.OracleDAL";//命名空间
/// <summary>
/// 命名空间
/// </summary>
public static string NameSpase
{
get { return _nameSpase; }
}
/// <summary>
/// 创建对象或从缓存获取
/// </summary>
public static object CreateObject(string AssemblyPath, string ClassNamespace)
{
object objType = DataCache.GetCache(ClassNamespace);//从缓存读取
if (objType == null)
{
try
{
objType = Assembly.Load(AssemblyPath).CreateInstance(ClassNamespace);//反射创建
DataCache.SetCache(ClassNamespace, objType);// 写入缓存
}
catch (Exception ex)
{
throw new Exception("反射创建数据处出错!", ex);
}
}
return objType;
}
/// <summary>
/// 创建数据层
/// </summary>
public static INTERFACE CreatedDal(string dal)
{
string classNamespace = string.Empty;
string assemblyPath = string.Empty;
string class_name = string.Empty;
switch (dal)
{
//不需要默认的数据库访问可在这里切换
//case ".test":
//
// class_name = ".test_new";
// assemblyPath = "TEST.Test";
// break;
default:
//默认数据处理层
class_name = NameSpase + dal;
assemblyPath = AssemblyPath;
break;
}
object objType = CreateObject(assemblyPath, class_name);
return (INTERFACE)objType;
}
}
}
1.生成 bll 的 地方
public class bllAPP_ROLE
{
private readonly IDal_Key1<RHIS.Entities.Model.APP_ROLEinfo,string> dal =
DataAccess<IDal_Key1<RHIS.Entities.Model.APP_ROLEinfo,string>>.CreatedDal(".dalAPP_ROLE");
.....
.....
}