摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于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. Chapter1:基础

    整本书的核心:语言的设计与实现 我们所看到的设计是显示的,语法定义的, 而实现是隐式的,决定了编译或运行时的行为. 了解设计的目的,可以推测实现的细节,也可以自己实现设计. 学习具体的实现,更充分的达 ...

  2. 【BAT面试题系列】面试官:你了解乐观锁和悲观锁吗?

    前言 乐观锁和悲观锁问题,是出现频率比较高的面试题.本文将由浅入深,逐步介绍它们的基本概念.实现方式(含实例).适用场景,以及可能遇到的面试官追问,希望能够帮助你打动面试官. 目录 一.基本概念 二. ...

  3. IOT高性能服务器实现之路

    市场动态 物联网市场在2018年第一季度/第二季度出现了意想不到的加速,并将使用的物联网设备总数提升至7B.这是IoT Analytics最新“ 物联网和短期展望状态 ”更新中的众多发现之一. 全面的 ...

  4. 基本服务器的AAA实验

    一.实验拓扑 二.网络地址分配 三.不同网段互相PING通 PC-A ping PC-B PC-A ping PC-C PC-B ping PC-C 四.配置过程 (1)在路由器R1上配置本地用户账号 ...

  5. Vue 进阶之路(五)

    之前的文章我们说了一下 vue 的样式绑定,这篇文章来介绍一下 vue 中的条件渲染,先看下面的代码: <!DOCTYPE html> <html lang="en&quo ...

  6. Java8新特性之一:Lambda表达式

    Java8是自java5之后最重大的一次更新,它给JAVA语言带来了很多新的特性(包括编译器.类库.工具类.JVM等),其中最重要的升级是它给我们带来了Lambda表达式和Stream API. 1. ...

  7. LVS的DR模型配置

    LVS的DR模型配置 介绍 下图为DR模型的通信过程,图中的IP不要被扑结构中的IP迷惑,图里只是为了说明DR的通信原理,应用到本例中的拓扑上其工作原理不变. 拓扑结构 服务器 IP地址 角色 Srv ...

  8. video 属性和事件用法大全

    1.video 属性 <!-- video 不支持 IE8及以下版本浏览器,支持三种视频格式:MP4,WebM 和 Ogg --> <video src="test.mp4 ...

  9. Linux V4L2之camera

    一.硬件知识 1. 摄像头硬件结构和工作原理,如图1&图2 外部光线穿过lens镜头,经过红外滤光片后光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字 ...

  10. 如何在ASP.NET Core中自定义Azure Storage File Provider

    文章标题:如何在ASP.NET Core中自定义Azure Storage File Provider 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p ...