Castle学习笔记二:框架结构及配置
参考网络文章,并结合现有项目进行学习,熟悉框架结构及其配置。
现有项目和案例项目的结构有一点不同,但大致结构差不多,都包括:
Domain:系统领域,所有数据库实体的对象,数据载体,在其他各个层都要用到。
Persistence:持久层,持久化数据到数据库,其中包括Interface(接口)和mapperDao(实现)
Service:服务层,系统用到的所有业务方法,调用Persistence层,其中包括Implement(实现)和Interface(接口)
Web:页面层(最终与用户交互)
Common:系统公共层,包括公用方法和类
关于配置:
1. 首先需要配置web.config文件,供Castle使用。需要将web.config放在Web应用程序的根目录下,Castle会自动从web.config中读取。
<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文件的配置
<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" />
</configuration>
这样castle就可以自动将ibatisnet管理起来了,需要ibatisnet的时候会自动运行ibatisnet.
3. Service.config文件的配置
<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的配置
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配置:
<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