16

Oracle ATG 和 Struts 有什么区别?

4

3 回答 3

59

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

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

MVC 框架(基本的 Form 处理程序模式)有点类似于 Struts 的 Form 和 Action 类——但它提供了一个比 Struts 更基本的框架。开箱即用,在大多数开发人员工作的级别上,ATG 模型是页面驱动的,而不是控制器驱动的。在内部,它肯定是控制器驱动的,使用管道方法链接调度程序和控制器。

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

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

ATG 的扩展点和集成点通常设计得非常好,并且有很好的文档记录。它们支持与电子商务和出版领域的几乎任何人进行集成,例如创作和内容管理、身份管理和安全、产品目录、搜索和引导导航等。此外,框架的几乎所有领域都是可扩展的和可插入的,因此您可以编写自己的组件来增强或替换开箱即用的组件。

比较两者并没有多大意义。但是,鉴于您的问题,我想您真正感兴趣的是 ATG 的 MVC 部分

对于 MVC,Struts 比 ATG 提供的更多(但 Spring MVC 比 Struts 提供的更多)。但是,与使用 ATG 相比,Struts 更容易陷入框架机制的困境。

就我个人而言,我认为 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 中,他们谈论的 Controller 根本不是 MVC 控制器——它实际上是一个调度程序。许多属于控制器的代码最终都在您的 Action 类中。但是按照 Struts 的设计方式,Action 类实际上是为了做模型所做的事情。

  3. MVC中的View 应该由模型填充 - 它是模型更新视图的推送机制,而不是视图查询模型的拉取机制。在大多数 web-MVC 框架中,视图(通常是 JSP)从模型中提取状态以显示自身。ATG 的页面驱动方法尤其如此。如果您发现在呈现页面时正在获取数据,则意味着您的 MVC 设计有问题。

在 Struts 中,MVC Controller 的功能分布在 Struts 控制器和 Action 上,而 MVC Model 的功能分布在 Form 对象和 Action 上。

在 ATG 中,MVC Controller 和 MVC Model 的功能都在 Form-handler 中

话虽如此,由于 HTTP 的请求-响应特性,Web-MVC 框架中 Controller 的功能非常有限。对于 Web 应用程序,我们倾向于在提交表单时获得完全更新的视图,而不是像使用丰富的 UI 框架那样进行大量小的更改(例如,每次按键或鼠标单击,或每个更改的输入字段)。AJAX 的使用正在改变这一点——我们必须更多地考虑正确实现 MVC。

请记住,MVC 是一种设计模式——也就是说,它是设计应用程序的 GUI 方面时要使用的设计时原则。Struts 和 ATG 是框架 - 即它们是在构建应用程序时要扩展、实现或配置的类和对象。框架不能强制使用设计模式——它只能鼓励它。选择使用特定的框架不会让你更好地设计你的 ciode - 最多它可能会鼓励某种学科。

如果你的 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 流设计。

于 2008-12-30T12:17:18.813 回答
9

The main difference in the UK is that as an ATG contractor you can get £500 per day, but as a general Struts guy you're lucky to get £350.

Not that I'm bitter at all.

于 2009-08-05T10:37:40.957 回答
-1

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

于 2010-04-05T10:03:13.987 回答