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配置文件都不好意思和别人打招呼的时代已经过去了....让我们一起来干掉无厘头的XML吧....
下篇预告:Asp.Net大型项目实践(14)-约定胜于配置:解决Asp.net中繁琐的UI层赋值代码
在我们的实际开发中发现编写和存在大量的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层赋值代码
相关文章推荐
- asp.net项目中通过Web.config配置文件及文件夹的访问权限!
- Asp.Net大型项目实践(7)-用Unity实现AOP之事务处理+为啥要用AOP(附源码)
- asp.net项目中通过Web.config配置文件及文件夹的访问权限!
- Asp.Net大型项目实践(8)-从最简单开始一个ExtJs做的登录页(附源码,在线demo)
- Asp.Net大型项目实践(3)-业务领域对象建模
- Asp.Net大型项目实践系列第二季(二)Windows桌面的ExtJs4实现(含源码) [转]
- Asp.Net大型项目实践(12)-商业项目上线报告
- ASP.NET Core实现类库项目读取配置文件
- 【无私分享:ASP.NET CORE 项目实战(第八章)】读取配置文件(二) 读取自定义配置文件
- asp.net项目中通过Web.config配置文件及文件夹的访问权限---forms
- .Net下的MIS系统架构设计系列-和-Asp.Net大型项目实践
- ASP.NET Core实现类库项目读取配置文件
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之NHibernate的Session管理与初始化(附源码)
- Asp.Net大型项目实践-关键技术方案选择理由及思路(转)
- Asp.Net大型项目实践(5)-独家资料!整合NHibernate与Json序列化(附源码)
- [转载](asp.net大型项目实践)
- Asp.Net大型项目实践(1)-项目背景
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之NHibernate的Session管理与初始化(附源码)
- ASP.NET项目站点配置Web.Config文件
- [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)