zoukankan      html  css  js  c++  java
  • Castle学习笔记二:框架结构及配置

    参考网络文章,并结合现有项目进行学习,熟悉框架结构及其配置。

    现有项目和案例项目的结构有一点不同,但大致结构差不多,都包括:

    Domain:系统领域,所有数据库实体的对象,数据载体,在其他各个层都要用到。

    Persistence:持久层,持久化数据到数据库,其中包括Interface(接口)和mapperDao(实现)

    Service:服务层,系统用到的所有业务方法,调用Persistence层,其中包括Implement(实现)和Interface(接口)

    Web:页面层(最终与用户交互)

    Common:系统公共层,包括公用方法和类

    关于配置:

    1. 首先需要配置web.config文件,供Castle使用。需要将web.config放在Web应用程序的根目录下,Castle会自动从web.config中读取。

    <!--在<configuration>节点下新值-->
    <configSections>
      
    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"/>
    </configSections>

    <castle>
      
    <!--扩展castle,将ibatisnet当作插件和castle相结合-->
      
    <include uri="file://Config/Facilities.config"/>
      
    <!--告诉castel哪个接口由哪个类实现-->
      
    <include uri="file://Config/Services/Services.config"/>
      
    <!--Persistence层的SqlMapDao-->
      
    <include uri="file://Config/Persistence/Sample.config"/>
    </castle>

    <system.web>
      
    <!--
      <pages/>
      <httpHandlers>...</httpHandlers>
      <httpModules>...</httpModules>
      ...很多配置
      
    -->
    </system.web>

    2. Facilities.config文件的配置

    <configuration>
      
    <facilities>
        
    <facility id="logging" type="Castle.Facilities.Logging.LoggingFacility, Castle.Facilities.Logging" loggingApi="log4net" configfile="log4net.config"/>
        
    <!--为Castle 扩展 ibatisnet-->
        
    <facility id="ibatis" type="Castle.Facilities.IBatisNetIntegration.IBatisNetFacility, Castle.Facilities.IBatisNetIntegration" >
        
    <sqlMap id="SqlServerSqlMap" config="SqlMap.config" />
        
    <!--支持多数据源,但是需要配套的SqlMap.config文件和properties.config文件,并且需要在Persistence声明新的ISqlMapper,同时需要修改构造函数,使Castle能够通过IOC进行实例化
        <sqlMap id="SqlMapLocal" config="SqlMapLocal.config" />
        
    -->
        
    </facility>
        
    <facility id="biztiminghandle" type="Castle.Facilities.BizTimingHandle.BizTimingHandleFacility, Castle.Facilities.BizTimingHandle" />
        
    <!--支持业务层事务,为Castle扩展事务处理功能-->
        
    <facility id="transaction" type="Castle.Facilities.AutomaticTransactionManagement.TransactionFacility, Castle.Facilities.AutomaticTransactionManagement" />    
      </facilities>
    </configuration>

    这样castle就可以自动将ibatisnet管理起来了,需要ibatisnet的时候会自动运行ibatisnet.

    3. Service.config文件的配置

    <configuration>
      
    <components>
      
    <component id="YourSolution.AaBiz" service="YourSolution.Service.IAaBiz,YourSolution.Service" type="YourSolution.Service.AaBiz,YourSolution.Service"/>
      
    <component id="YourSolution.BbBiz" service="YourSolution.Service.IBbBiz,YourSolution.Service" type="YourSolution.Service.BbBiz,YourSolution.Service"/>
      
    <!--其他-->
      
    </components>
    </configuration>

    可以发现:服务(接口)IAaBiz由AaBiz类实现,Castle会自动装配,即在请求需要调用IAaBiz接口中的方法时,会自动实例化AaBiz类,并调用其中相应的方法。

    4. iBatisNet的配置文件sqlmap.config的配置

    <sqlMapConfig
      
    xmlns="http://ibatis.apache.org/dataMapper"
      xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance">
      
    <!-- providers.config 文件的路径,Web Application的项目名称-->
      
    <properties embedded="YourSolution.Web.Properties.config,YourSolution.Web" />
      
    <settings>
        
    <setting useStatementNamespaces="false"/>
      
    </settings>
      
    <providers resource="Config/Providers.config"/>
      
    <database>
        
    <!--其中的参数在Properties.config中设置-->
        
    <provider name="${provider}"/>
        
    <dataSource name="DocumentSystem" connectionString="${connectionString}"/>
      
    </database>
      
    <sqlMaps>
        
    <sqlMap embedded="${root}CnTypeGenMap.xml,${assembly}" />
        
    <sqlMap embedded="${root}CnTypeMap.xml,${assembly}" />
        
    <!--其他Map...-->
       
    </sqlMaps>
    </sqlMapConfig>

    以上设置iBatisNet对实体进行数据库操作的sqlmap.

    5. dao.config文件的配置

    咦?为什么在项目中没有找到dao.config,也没有找到dao的相关配置呢?

    参考文章中的dao.config配置:

    <daoConfig xmlns="http://ibatis.apache.org/dataAccess" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      
    <context id="SqlMapDao" default="true">
        
    <daoSessionHandler id="SqlMap">
          
    <property name="resource" value="sqlMap.config"/>
        
    </daoSessionHandler>
        
    <daoFactory>
          
    <dao interface="ATS.Persistence.Interface.IEmployeesDao, ATS.Persistence" implementation="ATS.Persistence.MapperDao.EmployeesSqlMapDao, ATS.Persistence"/>
         
    </daoFactory>
       
    </context>
    </daoConfig>

    主要是<daoFactory>节点的设置,dao运行时的接口对应的实现类,即:IEmployeesDao 由EmployeesSqlMapDao实现

    主要参考:http://hi.baidu.com/tlq_1983/blog/item/28b4aef5edfd9920bc3109c1.html

  • 相关阅读:
    什么叫开漏输出
    PIC16F877A TIMER1计数操作
    [转载]【Alientek STM32 实验2】按键输入
    STM32学习笔记1 IO口学习
    时间“四象限”法
    CLANNAD AFTER STORY 片头曲 「铭刻时间的歌」
    正则表达式测试工具
    War3窗口限定小工具发布
    利用ffmpeg转换mp4文件
    一个类似FlashGet的c#开源下载工具
  • 原文地址:https://www.cnblogs.com/niuniu1985/p/1647895.html
Copyright © 2011-2022 走看看