一个基于MVC的Web应用程序生成器外文翻译资料

 2023-06-26 10:49:52

英语原文共 10 页,剩余内容已隐藏,支付完成后下载完整资料


附录A 译文

一个基于MVC的Web应用程序生成器

Strahinja Lazetic Instituto Superior TecnicoUniversidade Tecnica de Lisboa Lisbon, Portugal Dusan Savic, Sinisa Vlajic, Sasa LazarevicThe Faculty of Organizational SciencesBelgrade UniversityBelgrade, Serbia

摘要

本文介绍了一个基于Spring MVC的web应用程序生成器。生成器是使用Freemarker模板和HibernateTools工具集设计的。生成的应用程序是基于三层架构和MVC软件模式的功能完备的web应用程序。本文简要介绍了Spring web应用的结构,更详细地阐述了设计模板及其在代码生成过程中的作用。该生成器的设计是为了显示快速开发自定义生成器作为特定应用程序需求的解决方案的可能性。

关键字——应用程序生成器;Spring;Freemarker;HibernateTools;MVC。

介绍

如今,信息技术是发展最快的业务领域之一,许多软件公司可以以相同的质量响应客户的需求。项目实现所需的时间和价格(取决于时间)成为获得工作的关键因素。问题在于如何降低这些成本,从而提高生产率,超越竞争。

应用程序生成器作为该问题的解决方案被引入。它们代表自动生成其他软件组件的软件组件。每个生成器使用特定的输入,并通过应用定义的规则产生输出。常用的输入是数据模型和模板。输出可以是不同类型的文本文件,如HTML页面、Java源代码文件、SQL脚本和XML文件。

与手工编码相比,使用生成器有许多优点。它极大地减少了应用程序设计所需的时间。生成器通过生成标准化的代码来提高源代码的质量,从而减少手工编码中常见的语法错误。此外,更改应用程序代码只需要更改特定的模板并重新启动生成器。将生成器作为一种高度复杂的软件组件来开发可以激励软件开发人员,并减少在手工编写大量类似或重复代码[1]时出现的单调性。

有许多论文报道了设计应用程序生成器的研究和实践。基本上,有两个开发应用程序生成器的方法。

一种基于专有软件组件,主要生成.NET应用程序(面向微软技术),另一种基于集成以java为中心的自由软件工具。前一种方法的一些例子是[2],[3],[4],[5],[6]。后一种方法的例子有JAG Java Application Generator[7]、Skyway Builder[8]等。一般来说,这些生成器是基于免费可用的组件和技术,如EJB和Hibernate[9],[10]模板引擎,如FreeMarker和应用程序开发框架,如Spring框架[11]或JBoss Seam框架[12]。例如,Skyway Builder是一个基于模板的生成器,也是应用程序生成的著名商业解决方案之一。它使用XML/XSL编写的模板,生成实现基本CRUD操作的功能完整的Spring应用程序。

此外,生成器可能基于独立的或特定的数据模型。例如,基于UML规范的源代码生成器[13]是一个应用程序生成器,它使用基于UML规范的独立数据模型。

本文描述了一个针对特定应用程序的简单应用程序生成器的快速开发。它的主要任务是在短时间限制和特定项目需求的情况下,从一开始就证明定制生成器的开发是正确的。生成器依赖于现有数据库作为代码生成的起点,并使用设计好的模板生成功能完整的Spring应用程序。它的开发是半自动化的,因为现有的代码库用于数据模型生产。

本文提供的生成器与其他解决方案有很多共同之处:它是基于模板的,使用Spring框架,生成实现基本CRUD操作的应用程序。尽管如此,它们之间还是有细微但重要的区别:所提供的生成器基于特定的数据库,而不是独立的数据模型,并且它只保留了代码生成过程的基本定制。这两个特性使生成器呈现出简单、经济的效益,比更一般的解决方案更适合特定的项目需求。

在撰写本文时,作者以之前在代码生成器开发方面的实践经验为基础。Comtrade IT解决方案和服务有限公司[14]为塞尔维亚共和国内政部开发的资产管理系统是使用JSF/JBoss Seam应用程序生成器构建的,该生成器是为系统特定的需求而构建的。它是一个供内部使用的专有内部网系统,涉及内政部车辆和其他资产的管理,由数百个用例组成。有几百个域对象。生成器的成功比最初预期的要好:大约60%的用例是使用生成器实现的完全或最小的手动干预,大约20%进行适度的手动更改,其余的我们必须手动编码。

本文共分为六个部分。在下一节中,将描述在手工编码过程中出现的一个常见问题。还简要描述了代码生成的现有解决方案。对包含表功能的程序逻辑的需求。在添加字典表的情况下,通常只需要实现基本的CRUD操作。在这种情况下,应用程序生成器将显著减少所需程序代码的设计时间。

在[13]中,作者描述了一个基于UML规范和XML/XSL模板的生成器。生成器使用现有的UML工具来交付UML功能。它最重要的特点是保持了灵活性在第3节中,提出解决方案针对问题提出。介绍了Spring应用程序的结构和与之相关的特定问题,以及使用模板生成代码可能带来的改进。然后,在下一节中,将详细描述生成器的架构。首先介绍了生成器的基本工作原理,然后描述了最有特色的模板的设计。在这一节的最后,启动生成器的过程是概述。第四部分对本文进行了总结,并对生成器进行了改进。在最后一节,对所提出的工作进行了总结,并给出了生成器的优势列表,以及与生成器性能相关的简短统计。

PRESENTATION LAYER

APPLICATION LOGIC

DATABASE

table1

pages

table2

pages

table1

classes

table2

classes

.

.

.

tableN pages

tableN classes

table1

classes

table2

classes

.

.

.

tableN

classes

table1

table2

.

.

.

tableN

tableN 1 pages

tableN 1 classes

tableN 1 classes

tableN 1

图1所示 三层结构的应用程序使用N表数据库

问题陈述

大型公司使用的企业应用程序通常基于数据库作为其数据存储。作为存储公司数据的地方,数据库代表了业务应用程序的核心和开发的起点。这些应用程序通常基于三层架构,这使得应用程序层的独立性和易于维护。图1显示了一个三层应用程序的结构,该应用程序使用带有N个表的数据库。

将一个新表插入数据库将需要设计应用程序逻辑的附加程序类,以及适当的用户界面页面和表示层中处理新表的控制器。新类的数量可能会有所不同,这取决于表的结构以及与其他表的关系朝着目标编程语言发展。此外,生成器还提供了基于输入参数自定义代码生成过程的向导。

解决上述问题的商业解决方案的一个很好的例子是Skyway Builder,它生成实现基本CRUD操作的功能完整的Spring应用程序。代码生成过程是基于UML类模型的,该工具提供了与大量UML工具的集成。生成器可以用作Eclipse IDE的插件,从而支持不同的向导和Spring应用程序的可视化开发。它的一个重要特性是模块化,它提供了要生成的应用层的选择。

然而,在实际的项目环境中,存在这样的情况:生成应用程序的现有解决方案不足以满足特定的项目需求,或者在价格或定制所需的时间方面,它们不具有成本效益。此外,软件公司的开发团队通常已经定义了自己的技术堆栈,这导致了使用现有生成器的进一步困难。在此基础上,针对作者所在的Comtrade IT Solutions and Services公司设计的塞尔维亚共和国内政部资产管理系统的需求,开发了一个JSF/JBoss Seam生成器。生成器的设计涵盖了应用程序中必须包含的大量特定技术,如Hibernate ORM、EJB3实体类、JBoss Seam框架、Java Server Faces和Richfaces,这些都是通过使用Freemarker模板页面实现的。生成器使用数据库作为生成应用程序的起点,并使用HibernateTools功能自动创建数据模型。由于数据库由大约400个表组成,其中很大一部分表示简单的字典表,因此生成器在代码生成方面表现出了极大的效率,大大减少了项目所需的时间完成。

本文的思想建立在所描述的实践经验的基础上,目的是展示快速开发与具体应用程序的结构和技术完全匹配的应用程序生成器的可能性。与基于UML规范的源代码生成器一样,生成器使用模板来生成源代码文件。不同之处在于,它不使用独立的数据模型,也不为目标编程语言提供灵活性,而只生成Java应用程序。生成器生成实现基本CRUD操作的功能完整的Spring应用程序,与商业Skyway Builder一样。另一方面,Skyway Builder提供了丰富的用户界面和更高级的定制,比如要生成的应用层的选择。

由于生成器基于特定的数据库而不是独立的数据模型,以及有限的定制和灵活性,这两个事实使生成器为要解决的问题提供了最适合、最简单和最经济的解决方案:快速开发具有特定项目需求和特定数据库结构的应用程序,例如以数据为中心的web应用程序,具有大量数据库表,具有简单和重复的逻辑,如字典表。

建议的解决方案

在设计我们对所述问题的解决方案时,我们进行了两个步骤。起点是Spring框架。第二步是通过使用模板来提高开发效率。

构造的Spring应用程序将实现基本的CRUD操作,并使用Hibernate Entity Manager的功能与呈现的数据库进行交互。域对象将在EJB3实体类技术中实现,该技术使用注释来映射到数据库表。DAO模式将支持业务层和持久层的松耦合。在表示层,使用Spring控制器[11]将用于处理使用JSP[15]技术实现的web页面。

让我们以一个简单的数据库为例,它由两个表组成Employee和Company,它们通过一对多的关系连接(如图2所示)。

图2 Spring web应用程序的数据库模式

该模式将作为构建样例Spring web应用程序的基础,样例Spring web应用程序将负责模式管理。

图3显示了管理这个简单数据库的Spring web应用程序的组件。域对象Company和Employee的通用组件位于图的中心线上。表1给出了这些组件的简短描述。

图3所示的其他组件是特定于领域对象的,它们位于图的左边和右边。这些是用于查看和更新域对象数据的JSP页面、管理这些页面的Spring控制器、实现业务逻辑的类、DAO类和域对象类。对于每个域对象,必须设计8个Java源代码文件和两个JSP文件。前面的示例基于一个仅包含2个表的简单数据库。在实际情况下,一个数据库可能有几百个表。例如,对于一个包含100个表的数据库,需要设计1000个文件。此外,应该将每个域对象的特定代码添加到所描述的公共文件中。

这是我们进入设计第二步的地方。我们的解决方案是:引入模板。

对于系统的每个组件,都将设计一个模板,并为其生成提供服务。这些模板将代表应用程序生成器的基础,应用程序生成器将把它们与特定的数据库数据合并,从而产生输出文件。处理之后,将为每个域对象特定的组件为每个域对象生成一个输出文件。此外,将为每个通用组件生成一个输出文件。

dispatcher-servlet.xml

配置、控制

公司组件

员工组件

CommonDaoImpl.java

使用

使用

CompanyDaoImpl.java

xml文件

EmployeeDaoImpl.java

插入、更新、删除

插入、更新、删除

CompanyDao.java

EmployeeDao.java

Company.java

Employee.java

常见的组件

CompanyServiceImpl.java

EmployeeServiceImpl.java

实例化

实例化

CompanyService.java

EmployeeService.java

EditCompanyController.ja

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[603351],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

课题毕业论文、开题报告、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。