『Spring.NET+NHibernate+泛型』框架搭建之WebUI(五)★

 前面的章节讲解了搭建Model、DAO、BLL,完成了前面这三大块框架的搭建,基本上我们开发一个项目只剩下,也只需要写写WebUI层就行了。当然了,我们的表现层可以是WebForm、WinForm、WPF、MVC都行。本来打算用MVC,但由于团队成员对web开发不熟悉,我采用是最简单的WebForm。不管表现层使用什么,其原理都是一样的,无非就是调用到IBLL层实例,然后调用它的各种方法来处理数据而已。至于大家在第一讲中看到的Common类库就不在本次分享中讲解了,里面就是存放了常用的工具类,如提示框、数据加密解密、Excel导入导出等等。


一、配置BLL对象

  接着上一节最后没有回答的问题来讲,配置BLL对象。首先,我们右键点击解决方案,添加新建项目-ASP.NET Web 窗体应用程序。添加引用:右键点击引用,选择“管理NuGet程序包”,选择“联机”,搜索“Spring.NET”,在搜索结果中选择“Spring.Net NHibernate 4 support”安装。该安装包括了一个NHibernate,但是还不够,同样的方法搜索NHibernate,并安装,除此而外还要添加Spring.Web引用,以及添加BLL、IBLL、Model、NHibernateDAO的引用。具体操作参考DAO层讲解。


然后再该项目下新建一个Config文件夹存放配置文件,再在里面添加一个名为objects.xml的xml文档,右键将其生成操作设置为“嵌入的资源”,代码如下:

<?xml version="1.0" encoding="utf-8" ?>

<objects xmlns="http://www.springframework.net">
  <!--T_AreaBLL,管理T_Area的对象-->
  <object id="T_AreaBLL" type="BLL.T_AreaBLL, BLL">
    <property name="Dao"  ref="T_AreaDAO"/>
    <property name="AreaDao"  ref="T_AreaDAO"/>
  </object>
  <!--T_AssessmentCoefficientBLL,管理T_AssessmentCoefficient的对象-->
  <object id="T_AssessmentCoefficientBLL" type="BLL.T_AssessmentCoefficientBLL,BLL">
    <property name="Dao" ref="T_AssessmentCoefficientDAO"/>
  </object>

  <!--T_AuthorityBLL,管理T_Authority的对象-->
  <object id="T_AuthorityBLL" type="BLL.T_AuthorityBLL,BLL">
    <property name="Dao" ref="T_AuthorityDAO"/>
    <property name="AuthorityDao" ref="T_AuthorityDAO"/>
  </object>

  <!--T_ClientBLL,管理T_Client的对象-->
  <object id="T_ClientBLL" type="BLL.T_ClientBLL,BLL">
    <property name="Dao" ref="T_ClientDAO"/>
  </object>

  <!--T_DictionaryBLL,管理T_Dictionary的对象-->
  <object id="T_DictionaryBLL" type="BLL.T_DictionaryBLL,BLL">
    <property name="Dao" ref="T_DictionaryDAO"/>
  </object>

  <!--T_DrugBLL,管理T_Drug的对象-->
  <object id="T_DrugBLL" type="BLL.T_DrugBLL,BLL">
    <property name="Dao" ref="T_DrugDAO"/>
  </object>

  <!--T_InvoicingCollectDetailBLL,管理T_InvoicingCollectDetail的对象-->
  <object id="T_InvoicingCollectDetailBLL" type="BLL.T_InvoicingCollectDetailBLL,BLL">
    <property name="Dao" ref="T_InvoicingCollectDetailDAO"/>
  </object>

  <!--T_InvoicingDetailBLL,管理T_InvoicingDetail的对象-->
  <object id="T_InvoicingDetailBLL" type="BLL.T_InvoicingDetailBLL,BLL">
    <property name="Dao" ref="T_InvoicingDetailDAO"/>
  </object>

  <!--T_LogBLL,管理T_Log的对象-->
  <object id="T_LogBLL" type="BLL.T_LogBLL,BLL">
    <property name="Dao" ref="T_LogDAO"/>
  </object>

  <!--T_MenuBLL,管理T_Menu的对象-->
  <object id="T_MenuBLL" type="BLL.T_MenuBLL,BLL">
    <property name="Dao" ref="T_MenuDAO"/>
  </object>

  <!--T_OpHistoryBLL,管理T_OpHistory的对象-->
  <object id="T_OpHistoryBLL" type="BLL.T_OpHistoryBLL,BLL">
    <property name="Dao" ref="T_OpHistoryDAO"/>
  </object>

  <!--T_RoleBLL,管理T_Role的对象-->
  <object id="T_RoleBLL" type="BLL.T_RoleBLL,BLL">
    <property name="Dao" ref="T_RoleDAO"/>
  </object>

  <!--T_UserBLL,管理T_User的对象-->
  <object id="T_UserBLL" type="BLL.T_UserBLL,BLL">
    <property name="Dao" ref="T_UserDAO"/>
    <property name="UserDAO" ref="T_UserDAO"/>
  </object>

  <!--V_InvoicingCollectDetailBLL,管理V_InvoicingCollectDetail的对象-->
  <object id="V_InvoicingCollectDetailBLL" type="BLL.V_InvoicingCollectDetailBLL,BLL">
    <property name="Dao" ref="V_InvoicingCollectDetailDAO"/>
  </object>

  <!--V_InvoicingDetailBLL,管理V_InvoicingDetail的对象-->
  <object id="V_InvoicingDetailBLL" type="BLL.V_InvoicingDetailBLL,BLL">
    <property name="Dao" ref="V_InvoicingDetailDAO"/>
  </object>

  <!--V_TrackBLL,管理V_Track的对象-->
  <object id="V_TrackBLL" type="BLL.V_TrackBLL,BLL">
    <property name="Dao" ref="V_TrackDAO"/>
  </object>

<!--V_CoverageRateBLL,管理V_CoverageRate的对象-->
<object id="V_CoverageRateBLL" type="BLL.V_CoverageRateBLL,BLL">
  <property name="Dao" ref="V_CoverageRateDAO"/>
  <property name="CoverageRateDao" ref="V_CoverageRateDAO"/>
</object>

  <!--V_AssessBLL,管理V_Assess的对象-->
  <object id="V_AssessBLL" type="BLL.V_AssessBLL,BLL">
    <property name="Dao" ref="V_AssessDAO"/>
    <property name="AssessDao" ref="V_AssessDAO"/>
  </object>

  <!--T_BuyDetailBLL,管理T_BuyDetail的对象-->
  <object id="T_BuyDetailBLL" type="BLL.T_BuyDetailBLL,BLL">
    <property name="Dao" ref="T_BuyDetailDAO"/>
  </object>

</objects>



  以id为T_RoleBLL的object节点为例,他描述的是T_RoleBLL实例化的对象是type中“命名空间.类名,命名空间”中指定的类,下面的property描述的为BLL中的属性,上一节讲解中父类BLL定义了一个IDAO<T>对象Dao,这里指定继承父类的子类T_RoleBLL实例化该Dao为property节点指定的ref属性T_RoleDAO对象,也就是指定IDAO<T>对象Dao由他的实现类的子类T_RoleDAO实例化。如果该业务逻辑层有单独实现的方法,需要单独实例化它定义的Dao,如T_AreaBLL中定义的AreaDao。需要特别注意的是:property节点中name名字必须与BLL层中定义属性名字相同,否则会报错,没有实例化成功。


调用的时候,先这样实例化:

IApplicationContext ctx = ContextRegistry.GetContext();
        /// <summary>
        ///   T_RoleBLL实例
        /// </summary>
        public IBLL<T_Role> BLL
        {
            get { return ctx.GetObject("T_RoleBLL") as IBLL<T_Role>; }
        }


同样,如果BLL层有特殊单独定义的方法,那么需要如下单独实例化:

/// <summary>
        /// T_AreaBLL实例
        /// </summary>
        public IBLL<T_Area> IAreaBLL
        {
            get { return ctx.GetObject("T_AreaBLL") as IBLL<T_Area>; }
        }

        public IT_AreaBLL AreaBLL
        {
            get { return ctx.GetObject("T_AreaBLL") as IT_AreaBLL; }
        }


二、Web.config配置

  这里的配置大部分是固定模板,没什么好讲的,注释都很详尽,先上代码,然后说一下注意的地方:

 

<?xml version="1.0" encoding="utf-8"?>
<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <!--Spring.NET配置 开始-->
  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web" />
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
      <!-- 数据库的配置参数 -->
      <section name="databaseSettings" type="System.Configuration.NameValueSectionHandler" />
    </sectionGroup>
  </configSections>

  <spring>
    <context>
      <resource uri="~/Config/objects.xml" />
      <!-- 嵌入在程序集中的配置文件 ,首先是程序集名称,然后命名空间,最后文件名, 注意名称的大小写必须完全一致 -->
      <resource uri="assembly://NHibernateDAO/NHibernateDAO.Config/DataAccess.xml" />
      <resource uri="assembly://NHibernateDAO/NHibernateDAO.Config/objects.xml" />
      <!--<resource uri="assembly://BLL/BLL.Config/objects.xml" />-->
    </context>
    <objects xmlns="http://www.springframework.net" /><!--必要-->
    <!--数据库配置服务器地址-->
    <databaseSettings>
      <add key="db.server" value="192.168.40.221" />
      <add key="db.database" value="FlowQuery" />
      <add key="db.userid" value="sa" />
      <add key="db.password" value="123" />
    </databaseSettings>
  </spring>
  <!--Spring.NET配置 结束-->


  <appSettings>
    <!-- 为 OpenSessionInViewModule 的 SessionFactory 提供名字 -->
    <add key="Spring.Data.NHibernate.Support.OpenSessionInViewModule.SessionFactoryObjectName" value="NHibernateSessionFactory" />

    <!-- 数据库连接字符串,(如果采用加密方式,上面一项要设置为true;加密工具,可在官方下载,
     如果使用明文这样server=127.0.0.1;database=.....,上面则设置为false。 -->
    <add key="ConnectionString" value="server=192.168.40.221;database=FlowQuery;uid=sa;pwd=123" />
    <!--一般文件类型-->
    <add key="fileType" value="jpg|gif|bmp|jpeg|png|rar|doc|txt|xls|docx|xlsx|swf|pdf|zip|ppt|pot|wps|JPG|GIF|BMP|JPEG|PNG|RAR|DOC|TXT|XLS|DOCX|XLSX|SWF|PDF|ZIP|PPT|POT|WPS" />
    <!--图片类型-->
    <add key="imgType" value="jpg|gif|bmp|jpeg|png|JPG|GIF|BMP|JPEG|PNG" />
    <!--导入Excel连接地址-->
    <add key="excelType" value="Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'" />
  </appSettings>
  
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <!-- IIS6配置  -->
    <httpModules>
      <!-- Spring 提供的 Module  -->
      <add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web" />

      <!-- 
          由 Spring 自动打开会话,必须提供一个名为 SessionFactory 的会话工厂 
          使用后,可以使用 SessionFactory 的 GetCurrentSession 方法获取会话
      -->
      <add name="OpenSessionInView" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate4" />
    </httpModules>
    <httpHandlers>
      <!-- Spring 提供的处理程序 -->
      <add verb="*" path="*.aspx" type="Spring.Web.Support.PageHandlerFactory, Spring.Web" />
      <!-- 取消 Spring.NET 对于 Web 服务的处理 -->
    
    <!--<add verb="*" path="*.asmx" type="Spring.Web.Services.WebServiceHandlerFactory, Spring.Web"/>-->
      <add verb="*" path="ContextMonitor.ashx" type="Spring.Web.Support.ContextMonitor, Spring.Web" />
      <add verb="*" path="*.ashx" type="Spring.Web.Support.DefaultHandlerFactory, Spring.Web" />
    </httpHandlers>

    <!--<customErrors mode="On" defaultRedirect="/Main/Error.aspx" />-->
    <!--Forms身份认证-->
    <authentication mode="Forms">
      <forms name="FlowQuery" path="/" loginUrl="Login.aspx" protection="All"/>
    </authentication>
    <!--表单验证模式为2.0,上传文件最大为10M-->
    <httpRuntime requestValidationMode="2.0" maxRequestLength="102400" executionTimeout="120" />
  </system.web>
 
  <system.webServer>
        <defaultDocument>
            <files>
                <add value="Login.aspx" />
            </files>
        </defaultDocument>
  </system.webServer>
</configuration>


  需要注意的是:databaseSettings节点配置的为之前的DAO篇讲解的数据库访问配置,key的值都是在DAO中定义好的变量,value给出具体的值就行了。


  最后,把WebUI层的目录贴一下:

 


  OK,断断续续把整个教程讲完了,很多详细的细节我这里没有讲,主要只是说了搭建一个Spring.NET+NHibernate+泛型优化的框架的过程。希望大家自己通过第一讲中提供的资料,或者其他资料来完善基础知识,达到精益求精。共勉!




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值