『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+泛型優化的框架的過程。希望大家自己通過第一講中提供的資料,或者其他資料來完善基礎知識,達到精益求精。共勉!




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章