谈谈个人关于程序开发中,“零配置”和“有配置”的看法【转】
本人是做Java开发的,在程序开发中会经常使用到OpenSource开源框架,这些框架大多都灵活、简单、易用、方便。而且开源框架一般会提供一些基本的配置,如我们常用的框架就有Hibernate要配置对象实体到数据库的映射;Spring要配置bean的管理及其对象、属性的注入;Struts要配置Action对象和返回的资源路径;MyBatis要配置CRUD(增删改查)的相关SQL语句。这些配置你不能省略,必须得有,没有程序也不会自动添加。我们也是极可能的简化这些配置,不管怎么样简化但这些配置是不能省略,虽然这些框架给我们开发程序都提供了很大方面上的便利。
但有时候你是否有纠结这么样的一个问题:到底是用XML配置?还是用Annotation注解配置?或是用XML和Annotation混合配置?
首先看看两种配置的优缺点比较
XML它是无可代替的超文本标记语言,可读性、传输性好,它还具有一下优点:
1、可读性、传输性好:XML可扩展标记语言,最大的优势在于开发者能够为软件量身定制适用的标记,使代码可读性大大提升。
2、灵活性、易用性、扩展性、移植性好:利用XML配置能使软件更具扩展性。如Spring将class间的依赖配置在XML中,最大限度地提升应用的可扩展性。同样,如果是基于接口注入方式,可以随便切换接口实现类进行注入即可。
3、验证机制:具有成熟的验证机制确保程序正确性。利用Schema或DTD可以对XML的正确性进行验证,避免了非法的配置导致应用程序出错。
4、修改配置而无需变动现有程序、无需重新编译。
虽然XML有如此多的好处,但它也不是万能的,XML也有自身的缺点:
1、开发友好性支持:需要解析工具或类库的支持。如果你的XML配置需要用到XML的提示或是解析编译,需要用到Schema或DTD进行验证。
2、性能影响:解析XML势必会影响应用程序性能,占用系统资源。至少你会用到一些解析XML的技术去解析节点元素内容。
3、维护性高:配置文件过多导致管理变得困难。
4、编译期无法对其配置项的正确性进行验证,或要查错只能在运行期。如Spring Bean配置了一个错误的类路径class。
5、IDE 无法验证配置项的正确性无能为力。如Spring注入一个错误的对象或属性。
6、查错变得困难。往往配置的一个手误导致莫名其妙的错误。
7、开发人员不得不同时维护代码和配置文件,开发效率变得低下。
8、配置项与代码间存在潜规则,改变了任何一方都有可能影响另外一方。
让我们来看看Annotation的优点
1、保存在class文件中,降低维护成本。
2、无需工具支持,无需解析。
3、编译期即可验证正确性,查错变得容易,虽然有部分错误需要在运行期间才能看到。
4、配置简单、简约,提升开发效率。
同样Annotation也不是万能的,它也有很多缺点
1、若要对配置项进行修改,不得不修改Java文件,重新编译打包应用。
2、配置项编码在Java文件中,可扩展性差、移植性性低。
那到底用什么样的配置呢,在这里我谈谈我个人的看法:
1、在开发期间我们用Annotation注解,这样在一定程度上不仅可以省去对XML配置文件的维护,而且大大的提高了开发效率,缩短了开发周期。
2、开发后期,项目功能完成,我们可以将Annotation配置转换为XML配置,禁用Annotation即可。这样做的理由是如果项目上线,我们需要修改相关代码的配置,直接改XML、properties配置文件即可。这样就不需要开发人员找到相应的代码修改源代码、重新编译打包发布。而xml的配置是可以直接修改的,不需要重新编译,只需重启下你的服务器即可。如果这样是不是即利用到框架给我们提供的Annotation注解,也利用到了XML配置。充分的发挥了开源框架给我们提供的技术应用。
3、混合模式,Annotation和XML相互运用。需要动态配置、后期经常性修改的就用XML配置,如果是不怎么修改的就用Annotation。或许这种混合模式更适合我们,你觉得呢?O(∩_∩)O~