Spring.net-业务层仓储

Spring.net-业务层仓储

本系列目录:ASP.NET MVC4入门到精通系列目录汇总

上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架。

1、假设我们来做一个用户登录的业务

那么我们可以现在IDAL项目中定义的的接口IOu_UserInfoDAL,注意是部分类partial,为了方便管理,把这些扩展的部分接口都统一放到文件夹ExtensionIDAL中进行管理,注意命名空间要和之前的部分接口一致。

using Model;namespace IDAL
{
    public partial interface IOu_UserInfoDAL
    {
        Ou_UserInfo GetUserInfoByName(string loginName);
    }
}

2、DAL项目中,新建文件夹ExtensionDAL,文件夹下面新建部分类Ou_UserInfoDAL

using IDAL;
using Model;

namespace DAL
{
    public partial class Ou_UserInfoDAL : IOu_UserInfoDAL
    {
       public Ou_UserInfo GetUserInfoByName(string loginName)
        {
            return base.GetListBy(x => x.uLoginName == loginName).FirstOrDefault();
        }
    }
}

3、IBLL项目新建文件夹ExtensionIBLL,文件夹下面新建IOu_UserInfoBLL接口

using Model;

namespace IBLL
{
    public partial interface IOu_UserInfoBLL
    {
        Ou_UserInfo Login(string strName, string strPwd);
    }
}

BLL项目中新建文件夹ExtensionBLL,文件夹下面新建Ou_UserInfoBLL类

using Model;
using IBLL;

namespace BLL
{
        public partial class Ou_UserInfoBLL : IOu_UserInfoBLL
        {
            /// <summary>
            /// 登陆
            /// </summary>
            /// <param name="strName"></param>
            /// <param name="strPwd"></param>
            /// <returns></returns>
            public Ou_UserInfo Login(string strName, string strPwd)
            {
                //1.调用业务层方法 根据登陆名查询
                Ou_UserInfo usr = base.GetListBy(u => u.uLoginName == strName).FirstOrDefault();
                //2.判断是否登陆成功

                return null;
            }
        }
}

4、关于spring.net的使用请参考:17、ASP.NET MVC入门到精通——Spring.net入门

我们下载下来spring.net包,然后把Spring.Core.dll 、Common.Logging.dll拷贝过来。在Web项目中添加一个Lib文件夹用来存放第三方的dll。

DI项目中,添加这两个dll的引用,然后新建类SpringHelper

using Spring.Context;
using Spring.Context.Support;

namespace DI
{
    public static class SpringHelper
    {
        #region 1.0 Spring容器上下文 -IApplicationContext SpringContext
        /// <summary>
        /// Spring容器上下文
        /// </summary>
        private static IApplicationContext SpringContext
        {
            get
            {
                return ContextRegistry.GetContext();
            }
        }
        #endregion

        #region 2.0 获取配置文件 配置的 对象 +T GetObject<T>(string objName) where T : class
        /// <summary>
        /// 获取配置文件 配置的 对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objName"></param>
        /// <returns></returns>
        public static T GetObject<T>(string objName) where T : class
        {
            return (T)SpringContext.GetObject(objName);
        }
        #endregion
    }

5、修改Web项目中的Web.config文件,添加Spring配置

   <!-- Spring 的配置 -->
   <sectionGroup name="spring">
     <section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web"/>
    <!-- 支持在 web.config 中定义对象 -->
     <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
   </sectionGroup>
  </configSections>
  <spring>
    <context>
      <resource uri="~/Config/objects.xml"/>
    </context>
  </spring>

Web项目中创建一个名为 Config 的文件夹,以保存独立的配置文件

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
  <object id="Ou_UserInfo" type="BLL.Ou_UserInfo,BLL" singleton="false"></object>
  <object id="BLLSession" type="BLL.BLLSession,BLL" singleton="false"></object>
  <object id="DBSessFactory" type="DAL.DBSessionFactory,DAL"></object>
</objects>

修改BaseBLL.cs

        #region 数据仓储 属性 + IDBSession DBSession
        /// <summary>
        /// 数据仓储 属性
        /// </summary>
        public IDAL.IDBSession DBSession
        {
            get
            {
                if (iDbSession == null)
                {
                    ////1.读取配置文件
                    //string strFactoryDLL = Common.ConfigurationHelper.AppSetting("DBSessionFatoryDLL");
                    //string strFactoryType = Common.ConfigurationHelper.AppSetting("DBSessionFatory");
                    ////2.1通过反射创建 DBSessionFactory 工厂对象
                    //Assembly dalDLL = Assembly.LoadFrom(strFactoryDLL);
                    //Type typeDBSessionFatory = dalDLL.GetType(strFactoryType);
                    //IDAL.IDBSessionFactory sessionFactory = Activator.CreateInstance(typeDBSessionFatory) as IDAL.IDBSessionFactory;

                    //2.根据配置文件内容 使用 DI层里的Spring.Net 创建 DBSessionFactory 工厂对象
                    IDAL.IDBSessionFactory sessionFactory = DI.SpringHelper.GetObject<IDAL.IDBSessionFactory>("DBSessFactory");

                    //3.通过 工厂 创建 DBSession对象
                    iDbSession = sessionFactory.GetDBSession();
                }
                return iDbSession;
            }
        }
        #endregion

6、我们来看下控制器的调用

       public ActionResult Index()
       {
           //1.通过业务接口查询数据
           var Ou_UserInfoBLL = DI.SpringHelper.GetObject<IOu_UserInfoBLL>("Ou_UserInfo");
           var userInfo= Ou_UserInfoBLL.Login("", "");
           //2.加载视图
           return View();
       }

我每个地方都通过DI.SpringHelper.GetObject<IOu_UserInfoBLL>("Ou_UserInfo");来调用是不是很不方便,那么我们可以来创建一个业务层仓储来统一管理这些对象的创建。

7、IBLL项目,新建T4模板IBLLSession.tt,拷贝之前IDAL中的模板IDALSession过来,稍微修改一下就可以了

 

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@ output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\MODEL\OA.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace IBLL
{
public partial interface IBLLSession
{
<#
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{#>
I<#=entity.Name#>BLL I<#=entity.Name#>BLL{get;set;}
<#}#>
}
}

8、BLL项目,新建T4模板BLLSession.tt,拷贝之前DAL中的模板DALSession过来,稍微修改一下就可以了

 

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@ output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\MODEL\OA.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IBLL;

namespace BLL
{
public partial class BLLSession:IBLLSession
{
<#
int index=0;
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
index++;
#>
#region <#=index #> 数据接口 I<#=entity.Name#>BLL
I<#=entity.Name#>BLL i<#=entity.Name#>BLL;
public I<#=entity.Name#>BLL I<#=entity.Name#>BLL{
get
{
if(i<#=entity.Name#>BLL==null)
i<#=entity.Name#>BLL=new <#=entity.Name#>BLL();
return i<#=entity.Name#>BLL;
}
set
{
i<#=entity.Name#>BLL=value;
}
}
#endregion

<#}#>
}
}

9、UI目录下面,添加类库项目Web.Helper,添加对IBLL和DI项目的引用,新建OperateContext.cs

using DI;
using IBLL;

namespace Web.Helper
{
    public class OperateContext
    {
        public static IBLLSession _IBLLSession = SpringHelper.GetObject<IBLLSession>("BLLSession");
    }
}

10、修改控制器调用

using IBLL;using Web.Helper;public ActionResult Index()
    {
        var userInfo = OperateContext._IBLLSession.IOu_UserInfoBLL.Login("", "");
        //2.加载视图
        return View();
    }

现在调用起来是不是方便了许多。

时间: 2024-10-12 20:20:43

Spring.net-业务层仓储的相关文章

【转载】 JAVA三层架构,持久层,业务层,表现层的理解

JAVA三层架构,持久层,业务层,表现层的理解 转载:http://blog.csdn.net/ljf_study/article/details/64443653 SSH: Struts(表示层)+Spring(业务层)+Hibernate(持久层) Struts: Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求. 在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发. (View:沿用JSP,HTTP,Form,Tag,Resourse : Co

关于Spring Boot中的业务层(Service)是否要创建接口的分析

很多人在借助Spring Boot框架开发web项目时,在业务层(Service)这一部分,标准做法是:定义一个接口,然后再一个或多个类去实现.疑问来了: ????????为什么我们要维护两份同构代码,而不直接使用一个类呢? ????????不创建接口,通过把业务实现类直接通过注解@Autowired注入控制层Controller,也一点不耽误功能的实现啊,那么我为什么还要创建接口? ????网上大部分回答都是说什么面向对象的解耦云云,引经据典,说得都很好,然而,都没有从根本上回答我们关心的问题

spring/springMVC/mybatis(持久层、业务层、控制层思路小结)

准备工作: ## 7 导入省市区数据到数据库中 1. 从FTP下载SQL脚本文件 2. 把脚本文件移动到易于描述绝对路径的位置 3. 进入MySQL控制台 4. 使用`tedu_store`数据库 5. 运行`source e:\t_dict.sql`以执行该脚本文件    (  linux下的命令是  source /home/soft01/桌面/t_dict.sql;) -------------------------------------------------------------

spring 系列5 为什么在业务层用事务

前面的操作都是在持久层使用事务.下面演示一个例子: 假设账户"小王"和"小张"各1000元. 小王去银行给小张转账100元,结果应该是:小王的金额900元,而小张的金额是1100元. 如果我们这么实现,结果会怎么样? 实体类: package com.mantishell.domain; public class Account { private Integer id; private String name; private Float money; publi

表现层(jsp)、持久层(类似dao)、业务层(逻辑层、service层)、模型(javabean)、控制层(action)

转自:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持久层(Hibernate)之间的松散耦合,我们采用业务代表(Business Delegate)和DAO(Data Access Object)两种模式.DAO模式为了减少业务逻辑和数据访问逻辑之间的耦合,当一个持久曾框架被应用时,该模式将会减少业务对象和该框架之间的耦合,这样我们可以不修改业务对象而选择不同的持久层框架的实现.实际

请问JAVA三层架构,持久层,业务层,表现层,都该怎么理解?和MVC三层模型有什么区别

持久层用来固化数据,如常说的DAO层,操作数据库将数据入库业务层用来实现整体的业务逻辑 如 前台获得了数据,逻辑层去解析这些数据,效验这些数据等操作表现层很好解释  你现在看到的网页 一些界面 都属于表现层的东西可以用一些Html,jsp,Swing来实现至于mvc么对应的是 model(模型) view(视图) Controller(控制)在javaweb中就很好理解了再XX系统中,前台页面属于view 贯穿前台后台持久层的一套模型就是model(EJB,Spring来实现)  而连接前台后台

七色花基本权限系统(13)- 业务层的设计和实现

解耦WebUI层与EntityFramework 在还未实现实体仓储时,登录功能是在控制器中直接初始化EF数据库上下文来实现的,这样也导致WebUI层必须引用EntityFramework.在完成数据层的设计和实现之后,控制器中不再直接使用EF数据库上下文对象,而是通过工作单元去调用实体仓储,其实到了这一步就可以让WebUI层不再依赖EntityFramework.从WebUI层中通过nuget管理的方式移除EF,但要注意的是,EF包含2个dll,其中的EntityFramework.SqlSe

MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案

目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理 MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案 上一章介绍了,如何建数据层和业务,以及各层之间的引用过关系 这章主要讲解怎么使用业务层的方法. 以及普遍遇到的EF关联查询的问题解决方案 1.在FytMsys.Web文件夹下建Fyt

dubbo分布式框架下web层调用业务层一直报空指针异常的解决办法

java.lang.NullPointerException............... 环境:SSM(通用mapper)+Dubbo 1.检查导包 提示注解@Reference  应该导入  import com.alibaba.dubbo.config.annotation.Reference;    @Service 应该导入  import com.alibaba.dubbo.config.annotation.Service; 2.检查 maven工程的业务层(service层) 是