您的位置:首页 > 编程语言 > ASP

Asp.Net大型项目实践(13)-尽可能的去掉项目中的大量XML配置文件

2011-03-21 16:01 621 查看
  在此系统的项目中我们采用NHibernate实现了ORM;采用Unity来实现了DI和AOP。这2个技术方案应该说都很不错。但随之而来的是,在较大规模系统中产生了大量的XML配置文件。
在我们的实际开发中发现编写和存在大量的XML配置文件有以下几点不利:

1.我们需要在XML中编写大量项目中的数据表名,数据库字段名,命名控件,类名等 ,但由于各种因素我们很难保证在XML的纯文本文件编辑器里键入的准确性。
往往一个字母或符号搞错,就会导致整个项目无法运行。就连“复制粘贴大法”有时候也难避免出错,且不说“复制粘贴大法”其实效率很低....,后来尝试做了
些自动生成工具,但因为有很多差异化,效果也不理想。

2.对于XML里的字符,维护检索比较困难。刚开始还好,做到后面你会发现随着项目进度的不断推进,项目中的XML已经变得非常庞大了。
想要从中准确的找到并正确修改一些东西已经成了一件很麻烦的事情,而且还会提心吊胆的怕改错了....

3.由于实际上线中的各种情况,XML文件实现不重新编译代码就能改变系统的想法其实不大现实....对于大多数系统更新我们往往还是要暂停系统重新编译整个项目

于是我们想到,不如把这些XML的相关配置都用代码实现,干掉这些难以编写和维护的XML文件!!

一.用Fluent代替NHibernate的XML配置和映射

Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之实现基本的数据库访问(附源码) 中我们采用XML文件来实现映射:

代码

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity"
type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</configSections>

<unity>
<typeAliases>
<!--BeginRepository-->
<typeAlias alias="IDictionaryRepository" type="Demo.HIS.Infrastructure.Core.Repositories.IDictionaryRepository, Infrastructure.Core" />
<!--EndRepository-->

<!--BeginService-->

<!--EndService-->

<!--BeginFacade-->
<typeAlias alias="IDictionaryFacade" type="Demo.HIS.Infrastructure.Facade.IDictionaryFacade, Infrastructure.Facade" />
<!--EndFacade-->
</typeAliases>
<containers>
<container>
<types>
<!--BeginRepository-->
<type type="IDictionaryRepository" mapTo="Demo.HIS.Infrastructure.Repositories.DictionaryRepositoryImpl, Infrastructure.Repositories" />
<!--EndRepository-->

<!--BeginService-->

<!--EndService-->

<!--BeginFacade-->
<type type="IDictionaryFacade" mapTo="Demo.HIS.Infrastructure.Facade.DictionaryFacadeImpl, Infrastructure.Facade" />
<!--EndFacade-->
</types>
</container>
</containers>
</unity>
</configuration>


现在改为写到代码里:

#region Dictionary
container.RegisterType<IDicCategoryRepository, DicCategoryRepositoryImpl>();
container.RegisterType<IDicItemRepository, DicItemRepositoryImpl>();
container.RegisterType<IDicCategoryBiz, DicCategoryBizImpl>();
container.RegisterType<IDicItemBiz, DicItemBizImpl>();
container.RegisterType<IDictionaryManager, DictionaryManagerImpl>();
container.RegisterType<IDictionaryService, DictionaryServiceImpl>();
#endregion Dictionary

#region GeneralDept
container.RegisterType<IGeneralDeptRepository, GeneralDeptRepositoryImpl>();
container.RegisterType<IGeneralDeptBiz, GeneralDeptBizImpl>();
container.RegisterType<IGeneralDeptManager, GeneralDeptManagerImpl>();
container.RegisterType<IGeneralDeptService, GeneralDeptServiceImpl>();
#endregion GeneralDept


有了强类型的智能感知,不用复制粘贴了,也不怕字符敲错了......

项目里没有一大堆Xml配置文件都不好意思和别人打招呼的时代已经过去了....让我们一起来干掉无厘头的XML吧....

下篇预告:Asp.Net大型项目实践(14)-约定胜于配置:解决Asp.net中繁琐的UI层赋值代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐