MVC接口的使用之自动创建实例化(一)学习

本文介绍了在MVC中使用接口实现数据访问层(DAL)的实例化,通过创建IDAL接口和DalFactory工厂类,实现了业务逻辑层(BLL)与数据层的解耦。在更换数据层时,只需更改DalFactory中的实例配置,降低了代码维护成本。同时,讨论了如何通过修改Web.config的appsettings来动态切换数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EFDAL层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.IDAL;
using Dulei.Model;


namespace Dulei.DAL
{
    public class UserInfoEFDal:IUserInfoDal        继承IUserInfoDal接口

    {
        public UserInfo ADD(UserInfo userInfo)      使用IUserInfoDal实现接口

        {
            DataModelContainer db = new DataModelContainer();
            db.UserInfo.Add(userInfo);
            db.SaveChanges();
            return userInfo;
        }
    }
}


AdoNetDal层


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.IDAL;

namespace Dulei.AdoNetDAL
{
    public class UserInfoAdoNetDal:IUserInfoDal       继承IUserInfoDal接口

    {
        public Model.UserInfo ADD(Model.UserInfo userInfo)       使用IUserInfoDal实现接口

        {
            throw new NotImplementedException();
        }

    }
}



DAL层实现自动实例创建

1、建立接口层IDAL

2、IDal层创建了UserInfo实例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.Model;

namespace Dulei.IDAL
{

        public interface IUserInfoDal
        {
            UserInfo ADD(UserInfo userInfo);
        }
}

BLL层调用接口实例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.AdoNetDAL;
using Dulei.DAL;
using Dulei.IDAL;
using Dulei.Model;

namespace Dulei.BLL
{
    public class UserInfoService
    {
        IDAL.IUserInfoDal userInfoDal =new UserInfoEFDal();                          IDAL.IUserInfoDal实例。只需要改new UserInfoEFDal();new IUserInfoDal();就可以更换数据DAL层

        public UserInfo AddUserInfo(UserInfo userInfo)
        {
            return userInfoDal.ADD(userInfo);
        }
    }
}

总结:更换数据层时就可以不用在去更改业务层代码了。只需要更改new的实例。

如果要改数据库还需要改new实例 


二、new实例

        上面已经对实例进行了接口的改良。下面对NEW 实例就行改良。

DalFactory类库增加类名为DALFactory

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.DAL;

namespace Dulei.DalFactory
{
    public class DALFactory
    {
        public static IDAL.IUserInfoDal GetUserInfoDal()
        {
            return new UserInfoEFDal();
        }
    }



更改BLL层NEW的实例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dulei.AdoNetDAL;
using Dulei.DAL;
using Dulei.IDAL;
using Dulei.Model;

namespace Dulei.BLL
{
    public class UserInfoService
    {
        private IDAL.IUserInfoDal userInfoDal = DalFactory.GetUserInfoDal();          通过DalFactory.GetUserInfoDal();拿到NEW的新实例 


        public UserInfo AddUserInfo(UserInfo userInfo)
        {
            return userInfoDal.ADD(userInfo);     以后更换DAL时只需要改return后面的代码,更换ado的数据库UserInfoAdoNetDal

        }
    }
}

虽然看上去简单,但是这里体现了面向对向的恩想。

新的问题要更数据库还要更改UserInfoDAL


传程序集进来。

namespace CZBK.OADemo.DalFactory
{
    public class DALSimpleFactory
    {
        public static IDAL.IUserInfoDal GetUserInfoDal()
        {
            //如果直接new 的话那么必须  改代码的才能切换不同的数据库访问层。
            //非常希望能做到:只改配置就能够创建出实例出来。也就是改变数据库访问层的实现。
            //return GetInstences("CZBK.OADemo.DAL", "CZBK.OADemo.DAL." + "UserInfoDal") as IUserInfoDal;
            return   new UserInfoAdoNetDal();
        }

        public static Object GetInstences(string assemblyName, string typeName)
        {
            return Assembly.Load(assemblyName).CreateInstance(typeName);
            //return null;
        }
    }
}
同过程序集来判断程序集的类型名字。

在去webconfig下

  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="AssemblyName" value="Dulei.Dal" />
    <add key="NameSpace" value="Dulei.Dal" />
  </appSettings>

增加了

    <add key="AssemblyName" value="Dulei.Dal" />
    <add key="NameSpace" value="Dulei.Dal" />

通过更改appsettings来修改使用的数据库


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值