摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于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. QTimer在QThread环境中失效的问题

    QTimer在非QThread的环境下能正常工作.但在QThread环境下,需要做一些改动才能正常工作. 创建Qt的线程有两种方式: 1. 子例化QThread 可以在虚函数run中启动定时器,大致的 ...

  2. Https协议与HttpClient的实现

    一.背景 HTTP是一个传输内容有可读性的公开协议,客户端与服务器端的数据完全通过明文传输.在这个背景之下,整个依赖于Http协议的互联网数据都是透明的,这带来了很大的数据安全隐患.想要解决这个问题有 ...

  3. Gradle入门到实战(一) — 全面了解Gradle

    声明:本文来自汪磊的博客,转载请注明出处 可关注个人公众号,那里更新更及时,阅读体验更好:  友情提示由于文章是从个人公众号拷贝过来整理的,发现图片没有正常显示,没关注公众号的同学可通过如下链接查看: ...

  4. go语言调度器源代码情景分析之六:go汇编语言

    go语言runtime(包括调度器)源代码中有部分代码是用汇编语言编写的,不过这些汇编代码并非针对特定体系结构的汇编代码,而是go语言引入的一种伪汇编,它同样也需要经过汇编器转换成机器指令才能被CPU ...

  5. Docker 快速开始

    1.  概念 对于开发人员和系统管理员来说,Docker是一个使用容器开发.部署和运行应用程序的平台.使用Linux容器部署应用程序称为容器化.容器并不新鲜,但是将它们用于轻松部署应用程序却很新鲜. ...

  6. 游戏UI框架设计(6): 消息传递中心

    游戏UI框架设计(6) --消息传递中心 最近一直忙于一个益智类游戏的研发工作,所以博客有段时间没有更新了.经过朋友的督促,决定这两天立刻完成最后的两篇博客讲解(UI框架).说起“消息传递中心”,或者 ...

  7. Cenots7下安装运行.NET Core、MicroSoft SQL Server 2019 preview 的基础实践

    一:概要 适应人群:.Net初学者.想了解.Net Core在Linux系统中的运行环境搭建者.初次且想在linux上应用.Net Core开发应用程序者: 基础技能:了解.NET基础开发技能者.有一 ...

  8. Java 处理PDF图章(印章)——图片图章、动态图章

    图章(印章)是一种在合同.票据.公文等文件中表明法律效应.部门机关权威的重要指示物,常见于各种格式的文件.文档中.对于纸质文档可以手动盖章,但对于电子文档,则需要通过特定的方法来实现.本篇文档分享通过 ...

  9. Redis主从同步要深入理解?一篇文章足矣!

    前言: 今天想和大家分享有关 Redis 主从同步(也称「复制」)的内容. 我们知道,当有多台 Redis 服务器时,肯定就有一台主服务器和多台从服务器.一般来说,主服务器进行写操作,从服务器进行读操 ...

  10. 搭建基于SornaQube的自动化安全代码检测平台

    一.背景和目的 近年来,随着新业务.新技术的快速发展,应用软件安全缺陷层出不穷.虽然一般情况下,开发者基本都会有单元测试.每日构建.功能测试等环节来保证应用的可用性.但在安全缺陷方面,缺乏安全意识.技 ...