mvc+工程模式 之接口类、工厂类,优化与简化 ,codesmith,动软生等生成之代码简化

 


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");

.....

.....

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值