`
阿尔萨斯
  • 浏览: 4557037 次
社区版块
存档分类
最新评论

零配置及惯例代替配置

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

这是[挑战MVC极限]EasyJWeb-1.0特性的第四篇文章,今天主要介绍零配置及惯例代替配置。

配置是好还是坏

  首先,我承认配置是好东西,它能够通过修改程序以外的数据来改变系统的运行性质或功能,大大提高了系统的灵活性,可维护性,从而延长了一个系统的存活期。
  跟其它任何事情一样,物极必反。当一个好的东西泛滥成灾的时候,我们也会产生厌恶,走向另外一个极端。而纵观今天我们正统的JavaEE应用,配置可谓无处不在,由于过分的强调了灵活性、可扩展性、可选择性,大到Spring小到log4j的各种框架、辅助工具都会提供配置文件来改变他们的运行属性。一个JavaEE应用往往需要到很多的框架及辅助工具,比如Spring的bean配置文件、dwr配置文件,hibernate的对象-关系映射文件、struts的配置文件、验证文件等。好大一堆啊,我们看看appfuse中的配置文件,而维护这些配置文件,并非一个简单的事儿。

如何简化配置

  为了解决过度“配置”给我们带来的配置恐惧病,唯一的办法是简化配置。
  我们如何简化配置,使配置尽量的少,尽量的简单,甚至把配置减到零呢?在整个java社区,有很多人在做着这样事儿。减化的流程大致如下:
  第一步:使用注解,把不是频繁变动的配置信息从外部配置文件迁移到与这些配置紧密联系的java文件中,可以减少2/3以上的配置信息。
  第二步:一些具有很多习惯性的配置属性,可以通过惯例约定的方式,来代替配置,从而又可以减掉一部分配置。
  第三步:最后余下的即是跟程序运行环境紧密相关,易变的配置文件。比如针对数据库连接信息dataSource的配置。
  这样就可以在不影响系统的灵活性、可扩展性、移植性的情况下,最大限度地减化了配置。

零配置

  EasyJWeb在开发的过程中,在配置处理上,一直把减化配置作为一个重点注意事项,并实现了零配置。有了零配置支持,你可以不写一句配置文件,就能实现立体感超强的JavaEE应用。dao、service、module、action等,都会按照惯例约定的方式来工作。
  比如,我们需要写一个用户登录的Action,可以在com.easyjweb.action这个包下面,添加一个名为LoginAction的类,可以继承AbstractPageAction或者直接实现IWebAction接口。 使用AbstractPageAction能自动识别模板,实现起来最简单,代码内容如下:

publicclassNewsActionextendsAbstractPageCmdAction...{
publicPagelogin(WebFormform,Modulemodule)
...{
if("xiaoxiao".equals(form.get("name"))&&"123".equals(form.get("password")))
...{
returnmodule.findPage("success");
}

elsereturnmodule.findPage("index");
}


在WEB-INF/views/login/目录中,存放两个文件,一个是名为index.html,主要是登录表单;另外一个是success.html,内容为登录成功提示页面。
这样即可通过/login.ejf来访问这个登录应用。
由此可见,我们确实不需要一句配置文件,就能让EasyJWeb这个MVC框架运转起来。

惯例(约定)代替配置

  在上面“零配置”示例中,我们没有使用一句配置文件,在这里EasyJWeb中的“惯例(约定)代替配置”功能起了非常大的作用。按约定方式来寻找Action、寻找视图模板页面。才使得mvc能工作起来。
  惯例代替配置,可以大大提高软件的生产力。在EasyJWeb中,很多地方都使用惯例代替配置,下面进一步介绍智能页面查询,这是一个惯例代替配置的例子。
在一个基于AbstractPageCmdAction的模块PersonAction中,有下面的方法:

publicvoiddoEdit()
...{
}

publicvoiddoList()
...{
}


 其中doEdit方法中可以不包含一句代码,也不需要有任何视图模板的代码。EasyJWeb在没有找到针对该模块相关Page配置的情况下,此时会自动应用“惯例代替配置”的功能,从而找到/views/person/edit.html作为doEdit的页面模板;同理,EasyJWeb的“惯例代替配置”还会把/views/person/list.html作为doList的页面模板。
除了模板以外,在代码生成,JPA Entity标签处理、通用业务封装,验证等均引入了“惯例代替配置”。在我们的实践中,“惯例代替配置”确实是一个非常牛的东西,他们帮我们省了很多事儿。




这是[挑战MVC极限]EasyJWeb-1.0特性的第四篇文章,今天主要介绍零配置及惯例代替配置。

配置是好还是坏

  首先,我承认配置是好东西,它能够通过修改程序以外的数据来改变系统的运行性质或功能,大大提高了系统的灵活性,可维护性,从而延长了一个系统的存活期。
  跟其它任何事情一样,物极必反。当一个好的东西泛滥成灾的时候,我们也会产生厌恶,走向另外一个极端。而纵观今天我们正统的JavaEE应用,配置可谓无处不在,由于过分的强调了灵活性、可扩展性、可选择性,大到Spring小到log4j的各种框架、辅助工具都会提供配置文件来改变他们的运行属性。一个JavaEE应用往往需要到很多的框架及辅助工具,比如Spring的bean配置文件、dwr配置文件,hibernate的对象-关系映射文件、struts的配置文件、验证文件等。好大一堆啊,我们看看appfuse中的配置文件,而维护这些配置文件,并非一个简单的事儿。

如何简化配置

  为了解决过度“配置”给我们带来的配置恐惧病,唯一的办法是简化配置。
  我们如何简化配置,使配置尽量的少,尽量的简单,甚至把配置减到零呢?在整个java社区,有很多人在做着这样事儿。减化的流程大致如下:
  第一步:使用注解,把不是频繁变动的配置信息从外部配置文件迁移到与这些配置紧密联系的java文件中,可以减少2/3以上的配置信息。
  第二步:一些具有很多习惯性的配置属性,可以通过惯例约定的方式,来代替配置,从而又可以减掉一部分配置。
  第三步:最后余下的即是跟程序运行环境紧密相关,易变的配置文件。比如针对数据库连接信息dataSource的配置。
  这样就可以在不影响系统的灵活性、可扩展性、移植性的情况下,最大限度地减化了配置。

零配置

  EasyJWeb在开发的过程中,在配置处理上,一直把减化配置作为一个重点注意事项,并实现了零配置。有了零配置支持,你可以不写一句配置文件,就能实现立体感超强的JavaEE应用。dao、service、module、action等,都会按照惯例约定的方式来工作。
  比如,我们需要写一个用户登录的Action,可以在com.easyjweb.action这个包下面,添加一个名为LoginAction的类,可以继承AbstractPageAction或者直接实现IWebAction接口。 使用AbstractPageAction能自动识别模板,实现起来最简单,代码内容如下:

publicclassNewsActionextendsAbstractPageCmdAction...{
publicPagelogin(WebFormform,Modulemodule)
...{
if("xiaoxiao".equals(form.get("name"))&&"123".equals(form.get("password")))
...{
returnmodule.findPage("success");
}

elsereturnmodule.findPage("index");
}


在WEB-INF/views/login/目录中,存放两个文件,一个是名为index.html,主要是登录表单;另外一个是success.html,内容为登录成功提示页面。
这样即可通过/login.ejf来访问这个登录应用。
由此可见,我们确实不需要一句配置文件,就能让EasyJWeb这个MVC框架运转起来。

惯例(约定)代替配置

  在上面“零配置”示例中,我们没有使用一句配置文件,在这里EasyJWeb中的“惯例(约定)代替配置”功能起了非常大的作用。按约定方式来寻找Action、寻找视图模板页面。才使得mvc能工作起来。
  惯例代替配置,可以大大提高软件的生产力。在EasyJWeb中,很多地方都使用惯例代替配置,下面进一步介绍智能页面查询,这是一个惯例代替配置的例子。
在一个基于AbstractPageCmdAction的模块PersonAction中,有下面的方法:

publicvoiddoEdit()
...{
}

publicvoiddoList()
...{
}


 其中doEdit方法中可以不包含一句代码,也不需要有任何视图模板的代码。EasyJWeb在没有找到针对该模块相关Page配置的情况下,此时会自动应用“惯例代替配置”的功能,从而找到/views/person/edit.html作为doEdit的页面模板;同理,EasyJWeb的“惯例代替配置”还会把/views/person/list.html作为doList的页面模板。
除了模板以外,在代码生成,JPA Entity标签处理、通用业务封装,验证等均引入了“惯例代替配置”。在我们的实践中,“惯例代替配置”确实是一个非常牛的东西,他们帮我们省了很多事儿。




分享到:
评论

相关推荐

    EasyJWeb1.0新特性抢先看

    #### 零配置及惯例代替配置 **配置是好还是坏?** 配置的存在与否往往取决于具体的应用场景。过多的配置会增加项目的复杂度,而合理的配置则能够增强系统的灵活性。EasyJWeb采取了“零配置”和“惯例代替配置”的...

    Starting_struts2中文版

    - **惯例重于配置**:尽量减少不必要的配置,通过遵循一定的约定来简化开发流程。 #### 五、Struts2高级技巧 - **重用ACTION配置**:通过定义ACTION的默认行为来减少重复的配置。 - **使用模式匹配调配符**:在...

    takahirokobayashi-42

    在Git仓库中,"main"通常是主分支的名字,代替了之前的"master",存放着项目的主线代码。这个目录可能包含了项目的启动文件、源代码、配置文件和其他资源。 在这个场景下,我们可以推测以下几个可能的知识点: 1. ...

    GNU Make 使用手册(中译版)

    - **代替执行命令**:讨论了如何在Makefile中定义替代命令,以便在某些情况下替换默认的命令。 - **避免重新编译文件**:介绍了如何配置Makefile以避免不必要的文件重新编译。 - **变量重载**:说明了如何在命令行中...

    Linux中高效编写Bash脚本的9个技巧

    这可以通过设置`errexit`选项实现,该选项会在任何命令返回非零状态时立即退出脚本。示例如下: ```bash set -o errexit # 或者 set -e ``` 当脚本中的某个命令执行失败时,`errexit`选项将使脚本立即停止执行。这...

    GNU Make 使用手册(中译版)pdf

    - **MAKEFILES变量**:解释了MAKEFILES变量的作用及如何使用它来管理多个Makefile文件。 - **文件再生**:探讨了如何使Makefile能够根据变化重新生成自身。 - **文件重载**:介绍了如何重载其他Makefile文件,以及...

    java编码规范,word版

    - **配置文件**:如`application.properties`或`settings.xml`等。 #### 四、文件组织 ##### 4.1 Java源文件 - **开头注释**:每个Java文件的顶部应包括版权信息、作者、创建日期等基本信息。 - **包和引入语句**...

    GNU_Make_使用手册(中译版)

    - **代替执行命令**:解释了如何在不执行实际命令的情况下模拟Make的行为。 - **避免重新编译文件**:介绍了如何跳过不必要的文件编译。 - **变量重载**:说明了如何在命令行上覆盖Makefile中的变量定义。 - **测试...

    vhdl代码规范

    8. **使用genericmap传递常数**:在模块参数中需要传递可能变化的常数时,采用`genericmap`方式,保持代码的灵活性和可配置性。 9. **使用括号表示优先级**:虽然VHDL有默认的运算符优先级,但在复杂的表达式中使用...

    symbian C++开发注意事项.pdf

    生成ARM目标文件时需要注意特定的编译选项和配置,以确保生成的代码能够有效地运行在Symbian设备上。 **4.2 函数导出** 在Symbian OS中,某些函数需要明确标记为对外可见,以便其他模块能够调用它们。这通常通过...

    GNU MakeFile使用手册.pdf

    - 说明了如何配置make以并行执行命令。 - **5.4 命令错误** - 讨论了如何处理命令执行失败的情况。 - **5.5 中断或关闭make** - 解释了如何在执行过程中终止make工具。 - **5.6 递归调用make** - 介绍了一种通过...

Global site tag (gtag.js) - Google Analytics