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

http://blog.csdn.net/winamw/article/details/17488007

 

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

85人阅读 评论(0) 收藏 举报

EFDAL层

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using Dulei.IDAL;  
  6. using Dulei.Model;  
  7.   
  8.   
  9. namespace Dulei.DAL  
  10. {  
  11.     public class UserInfoEFDal:IUserInfoDal        <span style="color:#009900;">继承IUserInfoDal接口</span>  
  12.   
  13.     {  
  14.         public UserInfo ADD(UserInfo userInfo)      <span style="color:#009900;">使用IUserInfoDal实现接口</span>  
  15.   
  16.         {  
  17.             DataModelContainer db = new DataModelContainer();  
  18.             db.UserInfo.Add(userInfo);  
  19.             db.SaveChanges();  
  20.             return userInfo;  
  21.         }  
  22.     }  
  23. }  


AdoNetDal层


  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using Dulei.IDAL;  
  6.   
  7. namespace Dulei.AdoNetDAL  
  8. {  
  9.     public class UserInfoAdoNetDal:IUserInfoDal       <span style="color:#009900;">继承IUserInfoDal接口</span>  
  10.   
  11.     {  
  12.         public Model.UserInfo ADD(Model.UserInfo userInfo)       <span style="color:#009900;">使用IUserInfoDal实现接口</span>  
  13.   
  14.         {  
  15.             throw new NotImplementedException();  
  16.         }  
  17.   
  18.     }  
  19. }  



DAL层实现自动实例创建

1、建立接口层IDAL

2、IDal层创建了UserInfo实例

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using Dulei.Model;  
  6.   
  7. namespace Dulei.IDAL  
  8. {  
  9.   
  10.         public interface IUserInfoDal  
  11.         {  
  12.             UserInfo ADD(UserInfo userInfo);  
  13.         }  
  14. }  

 

BLL层调用接口实例

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using Dulei.AdoNetDAL;  
  6. using Dulei.DAL;  
  7. using Dulei.IDAL;  
  8. using Dulei.Model;  
  9.   
  10. namespace Dulei.BLL  
  11. {  
  12.     public class UserInfoService  
  13.     {  
  14.         IDAL.IUserInfoDal userInfoDal =new UserInfoEFDal();                          <span style="color:#33cc00;">IDAL.IUserInfoDal实例。只需要改new UserInfoEFDal();new IUserInfoDal();就可以更换数据DAL层</span>  
  15.   
  16.         public UserInfo AddUserInfo(UserInfo userInfo)  
  17.         {  
  18.             return userInfoDal.ADD(userInfo);  
  19.         }  
  20.     }  
  21. }  

 

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

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


二、new实例

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

DalFactory类库增加类名为DALFactory

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using Dulei.DAL;  
  6.   
  7. namespace Dulei.DalFactory  
  8. {  
  9.     public class DALFactory  
  10.     {  
  11.         public static IDAL.IUserInfoDal GetUserInfoDal()  
  12.         {  
  13.             return new UserInfoEFDal();  
  14.         }  
  15.     }  




更改BLL层NEW的实例

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using Dulei.AdoNetDAL;  
  6. using Dulei.DAL;  
  7. using Dulei.IDAL;  
  8. using Dulei.Model;  
  9.   
  10. namespace Dulei.BLL  
  11. {  
  12.     public class UserInfoService  
  13.     {  
  14.         private IDAL.IUserInfoDal userInfoDal = DalFactory.GetUserInfoDal();          <span style="color: rgb(0, 153, 0); ">通过DalFactory.GetUserInfoDal();拿到NEW的新实例</span>   
  15.   
  16.   
  17.         public UserInfo AddUserInfo(UserInfo userInfo)  
  18.         {  
  19.             return userInfoDal.ADD(userInfo);     <span style="color:#009900;">以后更换DAL时只需要改return后面的代码,更换ado的数据库UserInfoAdoNetDal</span>  
  20.   
  21.         }  
  22.     }  
  23. }  

 

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

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


传程序集进来。

  1. namespace CZBK.OADemo.DalFactory  
  2. {  
  3.     public class DALSimpleFactory  
  4.     {  
  5.         public static IDAL.IUserInfoDal GetUserInfoDal()  
  6.         {  
  7.             //如果直接new 的话那么必须  改代码的才能切换不同的数据库访问层。  
  8.             //非常希望能做到:只改配置就能够创建出实例出来。也就是改变数据库访问层的实现。  
  9.             //return GetInstences("CZBK.OADemo.DAL", "CZBK.OADemo.DAL." + "UserInfoDal") as IUserInfoDal;  
  10.             return   new UserInfoAdoNetDal();  
  11.         }  
  12.   
  13.         public static Object GetInstences(string assemblyName, string typeName)  
  14.         {  
  15.             return Assembly.Load(assemblyName).CreateInstance(typeName);  
  16.             //return null;  
  17.         }  
  18.     }  
  19. }  

同过程序集来判断程序集的类型名字。

在去webconfig下

  1. <appSettings>  
  2.   <add key="webpages:Version" value="2.0.0.0" />  
  3.   <add key="webpages:Enabled" value="false" />  
  4.   <add key="PreserveLoginUrl" value="true" />  
  5.   <add key="ClientValidationEnabled" value="true" />  
  6.   <add key="UnobtrusiveJavaScriptEnabled" value="true" />  
  7.   <add key="AssemblyName" value="Dulei.Dal" />  
  8.   <add key="NameSpace" value="Dulei.Dal" />  
  9. </appSettings>  


增加了

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

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

MVC接口的使用之自动创建实例化(一)学习,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。