Oracle ATG和Struts之间的区别是什么?

16

Oracle ATG和Struts有什么区别?

3个回答

59

Struts是一个框架,用于J2EE Web应用程序中,试图提供基于MVC模式的编码方法。它包括一些附加的实用程序,用于表单数据验证等。它是一个开源项目,非常擅长解决Web应用程序中的特定问题,但仅限于解决该特定问题。

另一方面,ATG(ATG Dynamo)是一个应用平台 - 用于构建面向数据和内容驱动的Web应用程序,主要用于商业和发布。在框架级别,它是一个基于Java的应用程序平台,用于托管基于Web的应用程序,以及可通过RMI访问的业务组件,带有ORM层,组件容器,MVC框架和一组用于JSP的标记库。组件框架(Nucleus)是管理Java组件对象(bean)的生命周期和依赖绑定(依赖注入)的轻量级容器。在这个意义上,它有点类似于Spring bean容器,并且是ATG框架的核心 - 所有其他服务和框架都托管在其中。ORM层框架(Repositories)将对象与关系型数据库之间进行映射(正如您所期望的那样)。但它还可以使用相同的一致的数据访问API,处理LDAP,XML和文件系统数据源之间的映射。在页面上将表单元素绑定到业务对象值等方面的JSP标记比任何其他框架中的表单绑定标记更加优雅和清晰。编写自己的标记库等价物(Droplets)的机制比标准J2EE标记更加一致与Servlet API。

MVC框架(基本的Form handler模式)与Struts Form和Action类有点相似 - 但提供的框架比Struts基础得多。在大多数开发人员工作的层次上,ATG模型是基于页面而不是基于控制器驱动的。在内部,它肯定是基于控制器驱动的,采用管道方法来链接转发器和控制器。

此外,基本级别的框架为您提供了RMI容器,分布式缓存,分布式锁定和分布式单例,分布式事件和消息传递,任务调度程序,规则引擎以及定义业务工作流程的机制,具有自定义操作和结果,业务工作流程的图形编辑器,支持版本化数据,支持角色和权限,日志记录和审核 - 所有这些都是开箱即用的,并使用非常连贯和一致的API。

然后在解决方案级别,您还拥有处理用户配置文件,身份管理和个性化,内容创作,版本控制和发布,内容搜索,有形和无形商品的产品目录,产品搜索和引导式导航,定价,税务计算,促销,购物车,礼品清单和愿望清单,付款类型,运输方式,订单跟踪,客户关系管理等的组件和API。

ATG框架中的扩展点和集成点通常都设计得非常好,并且文档相当详细。它们支持与电子商务和出版领域中几乎所有重要人物(如作者和内容管理、身份管理和安全、产品目录、搜索和导航等)进行集成。此外,该框架的几乎所有领域都是可扩展的和可插拔的,因此您可以编写自己的组件来增强或替换开箱即用的组件。
并不是真正意义上比较这两个框架哪个更好。然而,鉴于你的问题,我想你真正感兴趣的是ATG的MVC部分。
对于MVC,Struts给你比ATG多的东西(但是Spring MVC给你的比Struts多)。然而,使用Struts时往往会陷入框架机制中,比使用ATG更加繁琐。
个人认为,ATG基于表单处理程序的模型比我看到过的大多数其他Web MVC框架更加优雅、简洁和易于使用,而且API与Servlet API更加一致。
请注意,大多数“Web MVC”框架都不像真正的MVC(即Smalltalk或甚至Java Swing GUI编程中使用的模式)。Struts和ATG都没有提供真正的MVC(按设计),虽然ATG实际上更接近。术语方面存在很多混淆。
例如:
1. 真正的MVC中的模型不是您的数据模型或域模型对象。它是表示视图中所有数据的模型。如果它恰好是一个域模型对象,那么就很好了,但更常见的情况是您需要一组不同的视图或表单对象。此外,模型负责保持自身更新——是模型与下层业务服务交互。ATG倾向于将模型和控制器融合为一个组件——表单处理程序。Struts倾向于将视图数据模型保持独立(表单对象),但并不鼓励其以真正的MVC意义上的模型使用——不是表单对象与其他业务服务交互以使自身更新。
2. MVC中的控制器不是您的业务控制器。在MVC中,控制器是视图和模型之间的通道。它对视图中的更改或对视图执行的操作做出反应,并相应地指示模型更新自身。在Struts中,他们谈论的控制器根本不是MVC控制器——它实际上是一个调度程序。许多属于控制器的代码最终会进入Action类中。但是Struts设计的方式,Action类实际上是要执行模型所做的事情。
3.在MVC中,视图应该由模型填充 - 这是一种推送机制,其中模型更新视图,而不是一种从视图查询模型的拉取机制。在大多数Web-MVC框架中,视图(通常是JSP)从模型中获取状态以显示自己。这在ATG的页面驱动方法中尤其如此。如果您发现数据在呈现页面时被提取,这意味着您的MVC设计存在问题。
在Struts中,MVC控制器的功能分布在Struts控制器和Action之间,而MVC模型的功能分布在表单对象和Action之间。
在ATG中,MVC控制器和MVC模型的功能都在表单处理程序中。
话虽如此,由于HTTP的请求-响应性质,在Web-MVC框架中,控制器的功能相当有限。对于Web应用程序,我们倾向于在提交表单后获得完全更新的视图,而不是像使用丰富的UI框架那样进行许多小的更改(例如每次键入或鼠标点击,或每个更改的输入字段)。 AJAX的使用正在改变这一点 - 我们必须更加关注正确实现MVC的方法。
请记住,MVC是一种设计模式 - 即它是一个设计时原则,用于设计应用程序的GUI方面。 Struts和ATG是框架 - 即它们是要在构建应用程序时扩展,实现或配置的类和对象。框架无法强制使用设计模式 - 它只能鼓励使用它。选择使用特定的框架不会使您设计代码更好 - 最多可能鼓励某种纪律。
如果您设计MVC得当,则使用Struts类或ATG类来实现它并不会有太大的差异。同样,如果您设计MVC不好,并希望您选择的框架弥补自己的缺点,那么使用Struts或ATG并没有太大的区别。如果您理解并遵循设计原则,您将发现在不同的框架之间轻松切换非常容易。
最好的代码将遵循良好的设计原则(例如真正的MVC),并使用所选框架中提供的正确工具来实现它(实现它)的方式。
回到您的问题;
如果您正在开发ATG项目,则应使用ATG提供的框架。当然可以将Struts适配到ATG应用程序中 - 我自己在许多年前就做过这个 - 但这需要付出比其价值更多的努力 - 并且您正在放弃ATG在对象生命周期管理,表单数据绑定等方面提供的许多开箱即用的功能。

如果你即将开始一个新项目的工作,并且可以选择使用框架 - 我个人推荐使用开源应用服务器 (例如 JBoss) 和 Spring 框架 - 它能够提供 ATG 和 Struts 所提供的最佳特点。它拥有类似 Nucleus 的组件容器 (应用上下文),可以与所有优秀的 ORM 解决方案 (如 Hibernate) 集成,并包含一个 MVC 框架,在我看来远远超过了 Struts。此外,我建议考虑使用 Spring Web-flow 来进行更高级别的 GUI 流程设计。


哇。当我看到这个问题时,我想,“回答这个问题需要写太多了。”你证明了我错了! - Cameron
哇!将近八年过去了,我仍然收到赞同票。谢谢。 - Vihung
注意。行业已经发生了变化,自2011年以来,我对这个问题的立场也发生了变化。好吧。我仍然不建议使用Struts。但我认为,与浏览器交互的formhandler/droplet/JSP方法已经过时了。对于今天世界上的几乎任何应用程序,我们都应该使用真正的MVC和JSON REST API。 - Vihung

9
在英国,ATG承包商每天可以获得500英镑的报酬,而一般的Struts开发人员幸运的话只能拿到350英镑。
并不是我有什么不满。

1
如果你的ATG组合包括Commerce Search、CSC和ACI,那么你可以走得更高。不要心怀不满,加入电子商务行业公会吧 :-)) - Miro A.
一家著名的英国食品零售商目前正在为任何能够接触到的ATG开发人员支付比这更高的薪酬。 - Tom Anderson

-1

ATG 是专有软件...资源较少...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接