MVC接口的使用之自动创建实例化(一)学习
http://blog.csdn.net/winamw/article/details/17488007
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 <span style="color:#009900;">继承IUserInfoDal接口</span>
- {
- public UserInfo ADD(UserInfo userInfo) <span style="color:#009900;">使用IUserInfoDal实现接口</span>
- {
- 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 <span style="color:#009900;">继承IUserInfoDal接口</span>
- {
- public Model.UserInfo ADD(Model.UserInfo userInfo) <span style="color:#009900;">使用IUserInfoDal实现接口</span>
- {
- 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(); <span style="color:#33cc00;">IDAL.IUserInfoDal实例。只需要改new UserInfoEFDal();new IUserInfoDal();就可以更换数据DAL层</span>
- 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(); <span style="color: rgb(0, 153, 0); ">通过DalFactory.GetUserInfoDal();拿到NEW的新实例</span>
- public UserInfo AddUserInfo(UserInfo userInfo)
- {
- return userInfoDal.ADD(userInfo); <span style="color:#009900;">以后更换DAL时只需要改return后面的代码,更换ado的数据库UserInfoAdoNetDal</span>
- }
- }
- }
虽然看上去简单,但是这里体现了面向对向的恩想。
新的问题要更数据库还要更改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来修改使用的数据库
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。