零配置及惯例代替配置

news/2024/7/4 12:34:50

这是[挑战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能自动识别模板,实现起来最简单,代码内容如下:

public   class  NewsAction  extends  AbstractPageCmdAction  {
public Page login(WebForm form,Module module)
{
 
if("xiaoxiao".equals(form.get("name"))&&"123".equals(form.get("password")))
 
{
  
return module.findPage("success");
 }

 
else return module.findPage("index");
}
 


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

惯例(约定)代替配置

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

public   void  doEdit()
{
}

public   void  doList()
{
}


 其中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能自动识别模板,实现起来最简单,代码内容如下:

public   class  NewsAction  extends  AbstractPageCmdAction  {
public Page login(WebForm form,Module module)
{
 
if("xiaoxiao".equals(form.get("name"))&&"123".equals(form.get("password")))
 
{
  
return module.findPage("success");
 }

 
else return module.findPage("index");
}
 


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

惯例(约定)代替配置

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

public   void  doEdit()
{
}

public   void  doList()
{
}


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





http://www.niftyadmin.cn/n/3648088.html

相关文章

如何在Ubuntu 18.04上将Postfix安装和配置为仅发送SMTP服务器

介绍 (Introduction) Postfix is a mail transfer agent (MTA), an application used to send and receive email. It can be configured so that it can be used to send emails by local application only. This is useful in situations when you need to regularly send em…

超级IOC容器SuperContainer

在JavaEE乃至其它的java应用程序中,容器显得非常重要。web容器、applet容器、EJB容器等,可谓容器无处不在。  从程序员的角度来说,IOC容器是一个非常好的东西,他能使得我们非常灵活的管理组件及依赖关系。可以毫不夸张地说&…

如何在Ubuntu 20.04上将Postfix安装和配置为仅发送SMTP服务器

介绍 (Introduction) Postfix is a mail transfer agent (MTA), an application used to send and receive email. It can be configured so that it can be used to send emails by local application only. This is useful in situations when you need to regularly send em…

想动就“动”起来

只要你愿意,严肃规矩的java也同样可以变得“动态”灵活起来。动有动的好处,静有静的好处。俗话说得好,“没有规矩不成方圆”,但“生命诚可贵,爱情价更高,若为自由故,两者皆可抛”。那么作为忙碌…

如何在Ubuntu 20.04上使用Nginx反向代理使用SSL配置Jenkins

介绍 (Introduction) By default, Jenkins comes with its own built-in Winstone web server listening on port 8080, which is convenient for getting started. It’s also a good idea, however, to secure Jenkins with SSL to protect passwords and sensitive data tra…

让代码与视图模板的分离

需要什么样的mvc在基于B/S的应用程序开发中,从基本的技术分工上来说就是两大块,一是软件显示界面,另一个是程序逻辑。在N年前的脚本语言时代,无论是asp、php还是jsp,我们基本是都是把这两者柔和在一起的。尽管我们想方…

灵活的视图切换及导向

在基于请求转发型的MVC框架中,给用户提供一个简单、灵活的视图切换及页面导向功能是非常关键的。作为EasyJWeb特性介绍系统的一篇文章,本篇主要介绍EasyJWeb中的页面切换及导向机制。EasyJWeb引入了纯模板的机制,通过其提供结构清晰的Module、…

【linux】

1、Linux系统介绍 不同于Windows,Linux是一个开源的操作系统。 Linux一切皆文件,对文件的操作有:创建文件、编辑文件、保存文件、关闭文件、重命名文件、删除文件、恢复文件。 1.1 目录结构 根目录 / bin:全称binary,含义是二进…