欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.Net MVC OA项目笔记<五>

程序员文章站 2022-07-09 13:02:27
1.1.1 抽象工厂封装数据操作类实例创建,然后DBSession调用抽象工厂,修改DBSession CZBK.ItcastOA.DALFactory数据会话层调数据层不能直接new,要封装一下解耦 1.2.1 CZBK.ItcastOA.DALFactory 新增抽象工厂类 AbstractFa ......

1.1.1  抽象工厂封装数据操作类实例创建,然后dbsession调用抽象工厂,修改dbsession

          czbk.itcastoa.dalfactory数据会话层调数据层不能直接new,要封装一下解耦

ASP.Net MVC OA项目笔记<五>

 

1.2.1 czbk.itcastoa.dalfactory 新增抽象工厂类  abstractfactory

1.2.2 web.config中配置一下配置信息(数据层的程序集和命名空间)

<!--配置程序集名称和命名空间名称-->
<add key="assemblypath" value="czbk.itcastoa.dal" />
<add key="namespace" value="czbk.itcastoa.dal" />

ASP.Net MVC OA项目笔记<五>

1.2.3 引入 system.configuration,因为要读取配置信息

ASP.Net MVC OA项目笔记<五>

1.2.4 抽象工厂类 abstractfactory代码

  /// <summary>
    /// 通过反射的形式创建类的实例
    /// </summary>
    public class abstractfactory
    {
        //读取配置的程序集和命名空间
        private static readonly string assemblypath = configurationmanager.appsettings["assemblypath"];
        private static readonly string namespace = configurationmanager.appsettings["namespace"];

        public static iuserinfodal createuserinfodal()
        {
            string fullclassname = namespace + ".userinfodal";
            return createinstance(fullclassname) as iuserinfodal;//把反射封装在这个方法里
        }
        private static object createinstance(string classname)
        {
            //加载程序集
            var assembly = assembly.load(assemblypath);
            return assembly.createinstance(classname);
        }
    }

1.2.5 通过抽象工厂封装了类的实例的创建

ASP.Net MVC OA项目笔记<五>

1.2.6 这样就完全解耦了,以后不管换成什么dal,只要更改配置文件就行   

1.3.1 各个会话层都是通过接口来调用,所以数据会话层也需要一个接口

         面向接口编程,通过这种方式来解耦

         idal添加一个接口idbsession

         首先idal也要引用一下ef,通过添加实体数据模型引用

 /// <summary>
    /// 业务层调用的是数据会话层的接口
    /// </summary>
    public interface idbsession
    {
        dbcontext db { get; }
        iuserinfodal userinfodal { get; set; }
        bool savechanges();

    }

1.3.2 让dbsession继承idbsession

ASP.Net MVC OA项目笔记<五>

 

 /// <summary>
    /// 1.数据会话层:就是一个工厂类,负责完成所有数据操作类实例的创建,然后业务层通过数据会话层来获取要操作数据类的实例,
    /// 所以数据会话层将业务层和数据层解耦。
    /// 2.在数据会话层中提供一个方法:完成所有数据的保存。
    /// </summary>
    public class dbsession:idbsession
    {
        //oaentities db = new oaentities(); 
        public dbcontext db
        {
            get
            {
                return dbcontextfactory.createdbcontext();
            }
        }

        private iuserinfodal _userinfodal;
        public iuserinfodal userinfodal
        {
            get
            {
                if(_userinfodal==null)
                {
                    //_userinfodal= new userinfodal();
                    //通过抽象工厂封装了类的实例的创建
                    _userinfodal = abstractfactory.createuserinfodal();
                }
                return _userinfodal;
            }
            set
            {
                _userinfodal = value;
            }
        }


        /// <summary>
        /// 一个业务中经常涉及到对多张表的操作,我们希望连接一次数据库,完成对这张表数据的操作,提高性能
        /// 工作单元模式
        /// </summary>
        /// <returns></returns>
        public bool savechanges()
        {
           return db.savechanges() > 0;
        }
    }