zoukankan      html  css  js  c++  java
  • ASP.Net MVC OA项目笔记<五>

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

              CZBK.ItcastOA.DALFactory数据会话层调数据层不能直接new,要封装一下解耦

    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" />

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

    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 通过抽象工厂封装了类的实例的创建

    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

     /// <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;
            }
        }
  • 相关阅读:
    python基础
    c# String ,String[] 和 List<String>之间的转换
    c#上位机与三菱PLC(FX3U)串口通讯
    Convert.ToInt32()和int.Parse()区别
    代码走查25条疑问
    前后端分离-django主机管理开发二
    前后端分离-django主机管理开发一
    django图书管理系统一
    力扣题目练习一
    ELK实战-kibana安装使用
  • 原文地址:https://www.cnblogs.com/VSMinos/p/9760277.html
Copyright © 2011-2022 走看看