zoukankan      html  css  js  c++  java
  • asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用

    摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说。

    上篇讲到DbSession,现在接着往下讲。

    首先,还是把一些类似的操作完善一下,与Dal层相同,我们同样可以把Bll层中某些使用广泛的类似的操作封装到基类中,另外,同样要给Bll层添加接口层。

    下面直接给出相应的代码:

    Bll层基类:

    BaseService.cs

     1  public abstract  class BaseService<T> where T : class,new()
     2     {
     3         public IBaseDal<T> CurrentDal { get; set; }
     4 
     5         public IDbSession DbSession
     6         {
     7             get
     8             {
     9                 return DbSessionFactory.GetCurrentDbSession();
    10             }
    11         }
    12 
    13         public BaseService()
    14         {
    15             SetCurrentDal();
    16         }
    17 
    18         public abstract void SetCurrentDal();//抽象方法:要求子类必须实现。
    19 
    20         public IQueryable<T> GetEntityByLambda(Expression<Func<T,bool>> wherelambda)
    21         {
    22             return CurrentDal.GetEntityByLambda(wherelambda);
    23         }
    24 
    25 
    26         public T AddEntity(T entity)
    27         {
    28             CurrentDal.AddEntity(entity);
    29             DbSession.SaveChanges();
    30             return entity;
    31         }
    32 
    33         //删除
    34 
    35         public bool DeleteEntity(T entity)
    36         {
    37             CurrentDal.DeleteEntity(entity);
    38             return DbSession.SaveChanges() > 0;
    39 
    40         }
    41         //
    42         public bool UpdateEntity(T entity)
    43         {
    44             CurrentDal.UpdateEntity(entity);
    45             return DbSession.SaveChanges() > 0;
    46 
    47         }
    48     }

     

    IBaseService.cs

    1  public  interface IBaseService<T> where T : class,new()
    2     {
    3         IQueryable<T> GetEntityByLambda(Expression<Func<T, bool>> wherelambda);
    4         T AddEntity(T entity);
    5         bool DeleteEntity(T entity);
    6         bool UpdateEntity(T entity);
    7     }

     

    IUserService.cs

    1  public  interface IUserService:IBaseService<Users>
    2  {
    3 
    4  }

     

    UserService.cs

     1  public class UserService:BaseService<Users>,IUserService
     2     {
     3 
     4         //IUserDal userDal = AbstractFactory.GetUserDal();
     5         //IDbSession dbSession = DbSessionFactory.GetCurrentDbSession();
     6         //public Users AddUser(Users user)
     7         //{
     8         //    dbSession.UserDal.AddEntity(user);
     9         //    dbSession.SaveChanges();
    10         //    return user;
    11         //}
    12 
    13         //public IQueryable<Users> GetUserByLambda(Expression<Func<Users,bool>> wherelambada)
    14         //{
    15         //    return dbSession.UserDal.GetEntityByLambda(wherelambada);
    16         //}
    17 
    18         //public bool DeleteUser(Users user)
    19         //{
    20         //    dbSession.UserDal.DeleteEntity(user);
    21         //    return   dbSession.SaveChanges() > 0;
    22         //}
    23 
    24         //public bool UpdateUser(Users user)
    25         //{
    26         //    dbSession.UserDal.UpdateEntity(user);
    27         //    return dbSession.SaveChanges() > 0;
    28         //}
    29 
    30         //给父类的属性赋值
    31         public override void SetCurrentDal()
    32         {
    33             CurrentDal = this.DbSession.UserDal;
    34         }
    35     }

     

    以上就是对Bll层的一些封装和接口层的构建,现在在现有的代码基础上,我们来看一下,控制器对Bll层的常规调用:

    下面给一段简短代码:

    HomeController => AddUser方法

     1  public  ActionResult  AddUser(FormCollection form)
     2  {
     3             Users user = new Users();
              //重点看这句,对Bll层的调用
    4 IUserService userService = new UserService(); 5 user.UserName = form["name"]; 6 user.PassWord = form["pwd"]; 7 user.PhoneNumber = form["phone"]; 8 user.EMail = form["email"]; 9 userService.AddEntity(user); 10 if (user == null) 11 { 12 return View("Contact"); 13 } 14 else 15 { 16 return View("About"); 17 } 18 }

     

    这是一段向数据库中添加user信息的代码,前端代码省略了。

    从这段代码里我们可以看到,这里Bll层和UI等的耦合度仍然非常的高,

    IUserService userService = new UserService();

     

    这一句跟前面讲的Bll层调Dal层一样,耦合度很高,那么如何降低这个耦合度呢,再次使用工厂的方法吗,不不不,那好像太麻烦了。
    这里就要用到一个新的知识点了———— spring.net (据说这个很牛逼,但我也不咋清楚,只能边学边写了)。

     接下来说一下spring.net的使用方法和步骤:

    1.在web.config中添加Spring.Net块配置和Spring.Net容器配置节点

    块配置节点:

    1  <!--Spring.Net块配置-->
    2     <sectionGroup name="spring">
    3       <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
    4     </sectionGroup>

    容器配置节点

    1   <!--Spring.Net 的容器的配置节点-->
    2   <spring>
    3     <context>
    4       <resource uri="file://~/Config/controllers.xml"/>
    5     </context>
    6   </spring>

    2.添加相关引用

    首先,在程序目录下的package文件夹新建 Spring.Net文件夹,然后导入如下文件:

    导入如下文件:

     

     在Ui项目下添加引用:

    3.更改global.aspx.cs文件

    将 MvcApplication 由继承 System.Web.HttpApplication 改为 Sring.Web.Mvc.SpringMvcApplication .

     4.在UI项目下新建Config文件夹,在文件夹中新建如下两个配置文件:controller.xml 和 services.xml

    controller.xml文件代码如下:

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <objects xmlns="http://www.springframework.net">
     3 
     4   <!--<object></object>引用了几个Service就写几个Service,此处只引用一个Service,所以只写一个-->
     5   <!--type ="类的全名(命名空间名+类名),程序集名称"-->
     6   <object type="IotPf.UI.Controllers.HomeController,IotPf.UI" singleton="false" >
     7     <property name="UserService" ref="UserService" />
     8     
     9   </object>  
    10 </objects>

    services.xml文件代码如下:

    1 <?xml version="1.0" encoding="utf-8" ?>
    2 <objects xmlns="http://www.springframework.net">
    3 
    4   <object name="UserService" type=" IotPf.Bll.UserService,IotPf.Bll" singleton="false" >
    5   </object>
    6 
    7 </objects>

    注意:在web.config中记得将services.xml的引用添加进来,并且要注意顺序,先services.xml,后controller.xml

     

    5. 然后我们回到HomeController中来:在其中添加属性userService

     

     然后执行程序,发现会报如下错误:

    此时,我们添加如下引用:

    microsoft.aspnet.webapi

    然后,再次执行程序:

    运行结果无误:

     这就是Spring.Net的使用步骤了。

    通过使用Spring.Net,也达到了使UI层和Bll层解耦的目的,而且操作较之工厂的操作简单的多。

     好了,一个简单框架的第二部分,UI层和Bll层的解耦也完成了,关于框架搭建的这篇博客就写到这里啦。

    我的email:3074596466@qq.com

    如有谬误,欢迎指正!

    声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。对于本博客如有任何问题,可发邮件与我沟通,我的QQ邮箱是:3074596466@qq.com
  • 相关阅读:
    1083 List Grades (25 分)
    1075 PAT Judge (25 分)
    15. 会话之session
    我的编程路----
    jQuery
    CSS
    HTML display 属性 和 行内元素、块状元素、行内块状元素的区别
    实例1 : 返回顶部小操作(JQ + JS 实现)
    jQuery 事件方法
    为什么静态方法 不可以 被 非静态方法调用?
  • 原文地址:https://www.cnblogs.com/CherishTheYouth/p/CherishTheYouth_1008.html
Copyright © 2011-2022 走看看