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

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

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

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

Bll层基类:

BaseService.cs

  public abstract  class BaseService<T> where T : class,new()
{
public IBaseDal<T> CurrentDal { get; set; } public IDbSession DbSession
{
get
{
return DbSessionFactory.GetCurrentDbSession();
}
} public BaseService()
{
SetCurrentDal();
} public abstract void SetCurrentDal();//抽象方法:要求子类必须实现。 public IQueryable<T> GetEntityByLambda(Expression<Func<T,bool>> wherelambda)
{
return CurrentDal.GetEntityByLambda(wherelambda);
} public T AddEntity(T entity)
{
CurrentDal.AddEntity(entity);
DbSession.SaveChanges();
return entity;
} //删除 public bool DeleteEntity(T entity)
{
CurrentDal.DeleteEntity(entity);
return DbSession.SaveChanges() > ; }
// 改
public bool UpdateEntity(T entity)
{
CurrentDal.UpdateEntity(entity);
return DbSession.SaveChanges() > ; }
}

IBaseService.cs

  public  interface IBaseService<T> where T : class,new()
{
IQueryable<T> GetEntityByLambda(Expression<Func<T, bool>> wherelambda);
T AddEntity(T entity);
bool DeleteEntity(T entity);
bool UpdateEntity(T entity);
}

IUserService.cs

  public  interface IUserService:IBaseService<Users>
{ }

UserService.cs

  public class UserService:BaseService<Users>,IUserService
{ //IUserDal userDal = AbstractFactory.GetUserDal();
//IDbSession dbSession = DbSessionFactory.GetCurrentDbSession();
//public Users AddUser(Users user)
//{
// dbSession.UserDal.AddEntity(user);
// dbSession.SaveChanges();
// return user;
//} //public IQueryable<Users> GetUserByLambda(Expression<Func<Users,bool>> wherelambada)
//{
// return dbSession.UserDal.GetEntityByLambda(wherelambada);
//} //public bool DeleteUser(Users user)
//{
// dbSession.UserDal.DeleteEntity(user);
// return dbSession.SaveChanges() > 0;
//} //public bool UpdateUser(Users user)
//{
// dbSession.UserDal.UpdateEntity(user);
// return dbSession.SaveChanges() > 0;
//} //给父类的属性赋值
public override void SetCurrentDal()
{
CurrentDal = this.DbSession.UserDal;
}
}

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

下面给一段简短代码:

HomeController => AddUser方法

  public  ActionResult  AddUser(FormCollection form)
{
Users user = new Users();
          //重点看这句,对Bll层的调用
IUserService userService = new UserService();
user.UserName = form["name"];
user.PassWord = form["pwd"];
user.PhoneNumber = form["phone"];
user.EMail = form["email"];
userService.AddEntity(user);
if (user == null)
{
return View("Contact");
}
else
{
return View("About");
}
}

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

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

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

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

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

块配置节点:

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

容器配置节点

   <!--Spring.Net 的容器的配置节点-->
<spring>
<context>
<resource uri="file://~/Config/controllers.xml"/>
</context>
</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文件代码如下:

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

services.xml文件代码如下:

 <?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"> <object name="UserService" type=" IotPf.Bll.UserService,IotPf.Bll" singleton="false" >
</object> </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

如有谬误,欢迎指正!

asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用的更多相关文章

  1. asp.net mvc 简单项目框架的搭建过程(一)对Bll层和Dal层进行充分解耦

    学习asp.net 已经有近三个月的时间了,在asp.net mvc上花的时间最多,但个人真是有些菜,不得不说,asp.net mvc的水真的还是蛮深的.目前在公司实习,也见过公司几个项目的代码了.对 ...

  2. ASP.NET MVC企业级项目框架

    ASP.NET MVC企业级项目框架 MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,搭建过程内容比较多,结合了抽象工厂 ...

  3. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)

    引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一   的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...

  4. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(2 配置spring-dao和测试)

    用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 搭建目录环境和依赖) 四:在\resources\spring 下面 ...

  5. ASP.NET MVC项目框架快速搭建实战

    MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,采用”Domain Model as View Model“的MVC开发 ...

  6. iOS通用的MVC模式项目框架MobileProject

    最近项目比较不赶的情况下,决定把一些通用.常用的内容集成在一个项目框架中,意在新项目中可以快速搭建:其实经过几个项目后,总是有一些重复的创建工作,可以使用本项目的内容直接进行开发:采用的是MVC的分层 ...

  7. 我是如何进行Spring MVC文档翻译项目的环境搭建、项目管理及自动化构建工作的

    感兴趣的同学可以关注这个翻译项目 . 我的博客原文 和 我的Github 前段时间翻译的Spring MVC官方文档完成了第一稿,相关的文章和仓库可以点击以下链接.这篇文章,主要是总结一下这个翻译项目 ...

  8. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:SSM(Spring+Spring MVC+MyBatis)框架整合搭建详细步骤

    因为 Spring MVC 是 Spring 框架中的一个子模块,所以 Spring 与 SpringMVC 之间不存在整合的问题.实际上,SSM 框架的整合只涉及 Spring 与 MyBatis ...

  9. eclipse中SSH三大框架环境搭建<二>

    通过上一篇博客我们可以轻松搭建strtus2的环境,接下来由我来继续介绍spring的环境搭建以及spring注入的简单使用 相关链接:eclipse中SSH三大k框架环境搭建<一> ec ...

随机推荐

  1. xshell 快速复制打开之前用过的ssh

    有时候需要对一个ip地址的服务器进行多个操作,不在一个会话中,需要新建多个同样的会话 然后左键单击+号 出现一个新的会话 然后再右键单击+号 选择之前保存过的ip地址即可快速创建!

  2. 带着新人看java虚拟机07(多线程篇)

    这一篇说一下比较枯燥的东西,为什么说枯燥呢,因为我写这都感觉很无聊,无非就是几个阻塞线程的方法和唤醒线程的方法... 1.线程中断 首先我们说一说怎么使得一个正在运行中的线程进入阻塞状态,这也叫做线程 ...

  3. wGenerator如何编写模板

    编写模板大致分为4个步骤: 确定开发语言与数据库类型 分析表数据类型与语言的类型对应 分析代码中哪些可以规整为模板 编写与测试模板 我们对照流程图看的话会更加清晰: 1.如何分析表数据与开发语言的类型 ...

  4. 从壹开始 [vueAdmin后台] 之三 || 动态路由配置 & 项目快速开发

    回顾 今天VS 2019正式发布,实验一波,你安装了么?Blog.Core 预计今天会升级到 Core 3.0 版本. 哈喽大家周三好!本来今天呢要写 Id4 了,但是写到了一半,突然有人问到了关于 ...

  5. 深入理解OkHttp源码(一)——提交请求

    本篇文章主要介绍OkHttp执行同步和异步请求的大体流程.主要流程如下图: 主要分析到getResponseWidthInterceptorChain方法,该方法为具体的根据请求获取响应部分,留着后面 ...

  6. VS2017 WinFrom打包设置与教程

    前言 项目中有用到winfrom做配套的打印程序,直接给客户一个debug文件夹,当然不是很好.. 记录一下打包过程. 正文 首先需要下载 Visual Studio插件,到如图的地方下载: 搜索Mi ...

  7. Windows下Goland的Terminal设置为Git Bash

    Windows下Terminal默认的使用的是系统自带的cmd,功能实在太少,用起来远不如Git Bash来得方利和高效.其实要在Goland的Terminal中使用Bash设置起来也很简单,设置位置 ...

  8. Spring Boot 中关于自定义异常处理的套路!

    在 Spring Boot 项目中 ,异常统一处理,可以使用 Spring 中 @ControllerAdvice 来统一处理,也可以自己来定义异常处理方案.Spring Boot 中,对异常的处理有 ...

  9. [转载] Java中枚举类型的使用 - enum

    目录 1 枚举类的编译特性 2 向枚举类中添加方法 3 接口内部创建枚举 4 枚举类中使用枚举 5 扩展: 验证values()不是通过父类继承的 本文转载自博客 - Java枚举类型, 博主对原文内 ...

  10. ASP.NET Core微服务实战系列

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. 前言 这里记录的是个人奋斗和成长的地方,该篇只是一个系列目录和构想 ...