C#(Ado.Net)面向接口的三层架构(抽象工厂模式解决数据层与业务层紧耦合)

 

阅读本文需要的基础知识:

  1. 了解Ado.Net基本知识,理解三层架构
  2. 知道项目中app.config文件的基本知识,像连接字符串配置等。(前面博客有写)
  3. 简单知道工厂模式和抽象工厂模式内容,对反射有基础了解。

 

C#(Ado.Net)面向接口的编程解决业务层与数据层紧耦合的基本问题,案例如下

实例一 简单三层:

在简单三层项目中  业务层与数据层是紧耦合的关系。如下图所示为一个简单普通三层结构项目(UI层展现方式可随意,这里是web窗体)

对左边BLL层代码分析可知,如果DAL层发生变化,BLL层会受到影响,这样是BLL层和DAL层构成了紧耦合的关系,不利于稳定性。

 

实例二 面向接口编程解决紧耦合问题

1.项目结构

2.利用反射创建对象实例的代码解析

using System.Configuration;
using System.Reflection;

namespace DALFactory
{
        /// <summary>
        /// 抽象工厂:通过反射的形式创建类的实例(对象)。
        /// </summary>
        public class AbstractFactory
        {
            private static readonly string DalAssembly = ConfigurationManager.AppSettings["DalAssembly"];//字段已经封装在app.config文件中
            private static readonly string Namespace = ConfigurationManager.AppSettings["Namespace"];
            public static IDAL.IUserInfoDal CreateUserInfoDal()
            {
                string fullClassName = Namespace + ".UserInfoDal";
                var a = CreateInstance(fullClassName) as IDAL.IUserInfoDal;
                return a;
            }
        
            /// <summary>
            /// 通过反射的形式创建类的实例
            /// </summary>
            /// <param name="fullClassName"></param>
            private static object CreateInstance(string fullClassName)
            {
                var assembly = Assembly.Load(DalAssembly);//加载程序集
                var b = assembly.CreateInstance(fullClassName);
                return b;
            }
        }
}

 

3.通过分析BLL层代码面向接口编程和抽象工厂模式实现了业务层和数据层完全解耦

using Model;
using System.Collections.Generic;


namespace BLL
{
   public class UserInfoService
    {
        //DAL.UserInfoDal UserInfoDal = new DAL.UserInfoDal();//紧耦合

        IDAL.IUserInfoDal UserInfoDal = DALFactory.AbstractFactory.CreateUserInfoDal();
        public List<UserInfo> GetList()
       {
           return UserInfoDal.GetList();
       }
    }
}

4.以上为一个简单的C#面向接口编程的实例源代码和和数据库文件链接如下:

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值