前面的章节讲解了搭建 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;
}
}
来源: http://lib.csdn.net/article/dotnet/35951