Oracle ATG和支柱之间的区别?[已关闭]
Oracle ATG和Struts有什么区别?
Oracle ATG和Struts有什么区别?
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 标记比我见过的任何其他框架中的表单绑定标记更优雅、更清晰。编写自己的标签库等效项(Droplets)的机制比标准J2EE标签更符合Servlet API。
MVC 框架(基本的 Form 处理程序模式)有点类似于 Struts Form 和 Action 类 , 但提供了一个比 Struts 更基本的框架。开箱即用,在大多数开发人员工作的级别上,ATG模型是页面驱动的,而不是控制器驱动的。在内部,它肯定是控制器驱动的,使用管道方法来链接调度程序和控制器。
此外,基本级别的框架为您提供了RMI容器,分布式缓存,分布式锁定和分布式单例,分布式事件和消息传递,任务调度程序,规则引擎和用于定义具有自定义操作和结果的业务工作流的机制,业务工作流的图形编辑器,对版本化数据的支持,对角色和权限的支持, 日志记录和审核 - 全部开箱即用,并且都使用非常连贯和一致的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实际上更接近。关于术语有很多混淆。
例如
真正的 MVC中的 M odel 既不是你的数据模型,也不是你的域模型对象。它是表示视图中所有数据的模型。如果这恰好是一个领域模型对象,那么很好 - 但更多的时候,你会发现你需要一组不同的视图或表单对象。此外,该模型负责保持自身更新 - 它是与下层业务服务交互的模型。ATG倾向于将模型和控制器融合到一个组件中 - 表单处理程序。Struts倾向于保持视图数据模型的不同(表单对象),但不鼓励将其用作真正MVC意义上的模型 - 它不是与其他业务服务交互以保持自身更新的表单对象。
MVC 中的 C控制器不是您的业务控制器。MVC 中的控制器是视图和模型之间的管道。它对视图中的更改或对视图执行的操作做出反应,并指示模型相应地更新自身。在Struts中,他们谈论的控制器根本不是MVC控制器 - 它实际上是一个调度程序。属于控制器中的许多代码最终都位于 Action 类中。但是,按照 Struts 的设计方式,Action 类实际上意味着要执行模型所做的操作。
MVC 中的 View 应由模型填充 - 它是一种推送机制,其中模型更新视图,而不是视图查询模型的拉动机制。在大多数Web-MVC框架中,视图(通常是JSP)从模型中提取状态以显示自身。ATG的页面驱动方法尤其如此。如果您发现在页面呈现时正在获取数据,则表示您的MVC设计有问题。
在 Struts 中,MVC 控制器的功能分布在 Struts 控制器和 Action 中,而 MVC 模型的功能分布在 Form 对象和 Action 中。
在 ATG 中,MVC 控制器和 MVC 模型的功能都在表单处理程序中
话虽如此,由于HTTP的请求 - 响应性质,控制器在Web-MVC框架中的功能非常有限。对于Web应用程序,我们倾向于获得表单提交的完全更新视图,而不是像使用丰富的UI框架那样进行大量小的更改(例如,每次按键或鼠标单击,或每次更改输入字段)。AJAX的使用正在改变这一点 - 我们必须更多地考虑正确实现MVC。
请记住,MVC 是一种设计模式 - 即它是在设计应用程序的 GUI 方面时使用的设计时原则。Struts和ATG是框架 - 即它们是在构建应用程序时要扩展,实现或配置的类和对象。框架不能强制使用设计模式 - 它只能鼓励它。选择使用特定的框架不会让你更好地设计你的 ciode - 最多它可能会鼓励某个学科。
如果你设计得很好,无论你使用Struts类还是ATG类来实现它,它都不会有很大的区别。同样,如果你对你的MVC设计得很糟糕,希望你选择的框架能够弥补你的不足,那么无论你使用Struts还是ATG,它都不会产生巨大的差异。如果您了解并使用设计原则,您会发现在框架之间来回切换非常容易。
最好的代码将是那些在抽象中遵循良好设计原则(例如,真正的MVC)的代码,并使用所选框架中可用的正确工具以预期的方式实现它(实现它)。
回到你的问题;
如果您正在处理 ATG 项目,则应使用 ATG 提供的框架。当然,将Struts硬塞进ATG应用程序是可能的 - 我自己多年前就已经这样做了 - 但它的努力远远超过它的价值 - 并且你放弃了ATG在对象生命周期管理,表单数据绑定等方面提供的很多开箱即用的东西。
如果您即将开始一个新项目的工作,并且可以选择要使用的框架 - 我个人推荐一个开源应用程序服务器(如JBoss)和Spring框架 - 它为您提供了ATG和Struts提供的最好的功能。它有一个类似Nucleus的组件容器(应用程序上下文),它与所有好的ORM解决方案(如Hibernate)集成,并包括一个MVC框架,在我看来,它已经远远超过了Struts。此外,我建议查看Spring Web流,以获得更高级别的GUI流设计。
英国的主要区别在于,作为ATG承包商,您每天可以获得500英镑,但作为一般支柱人员,您很幸运可以获得350英镑。
并不是说我一点也不苦。