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标记比我见过的任何其他框架中的表单绑定标记更优雅和更清晰.编写自己的标记库等价物(Droplet)的机制与Servlet API比标准J2EE标记更加一致.
MVC框架(基本的表单处理程序模式)有点类似于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实际上更接近.关于术语存在很多混淆.
例如,
在中号在真正的MVC奥德尔是不是你的数据模型,也不是你的域模型对象.它是表示视图中所有数据的模型.如果恰好是域模型对象那么好又好 - 但通常情况下,您会发现需要一组不同的视图或表单对象.此外,该模型负责保持自身更新 - 它是与较低的业务服务交互的模型.ATG倾向于将模型和控制器融合成一个组件 - 表单处理程序.Struts倾向于保持视图数据模型不同(表单对象),但不鼓励将其用作真正的MVC意义上的模型 - 它不是与其他业务服务交互以保持自身更新的表单对象.
MVC中的C ontroller不是您的业务控制器.MVC中的控制器是视图和模型之间的管道.它会对视图中的更改或对视图执行的操作做出反应,并指示模型相应地更新自身.在Struts中,他们谈论的控制器根本不是MVC控制器 - 它实际上是一个调度程序.许多属于控制器的代码最终都在Action类中.但是Struts的设计方式,Action类实际上是为了做Model的功能.
的V在MVC IEW应该由模型来填充-这是一个推动机构与模型更新视图,而不是拉机构与查询模型的图.在大多数web-MVC框架中,视图(通常是JSP)从模型中提取状态以显示自身.ATG的页面驱动方法尤其如此.如果您发现在页面呈现时正在获取数据,则意味着您的MVC设计出现问题.
在Struts中,MVC控制器的功能分布在Struts控制器和Action上,而MVC模型的功能分布在Form对象和Action上.
在ATG中,MVC控制器和MVC模型的功能都在Form-handler中
话虽如此,由于HTTP的请求 - 响应特性,控制器在web-MVC框架中的功能非常有限.对于Web应用程序,我们倾向于获得表单提交的完全更新视图,而不是像许多UI框架那样进行大量小的更改(例如,每次按键或鼠标单击,或每个更改的输入字段).使用AJAX正在改变这一点 - 我们必须更多地思考如何正确实现MVC.
请记住,MVC是一种设计模式 - 即它是在设计应用程序的GUI方面时使用的设计时原则.Struts和ATG是框架 - 即它们是在构建应用程序时要扩展,实现或配置的类和对象.框架不能强制使用设计模式 - 它只能鼓励它.选择使用特定的框架不会让你更好地设计你的ciode - 最多它可能会鼓励某个学科.
如果你很好地设计你的MVC,那么使用Struts类或ATG类来实现它不会产生很大的不同.同样,如果你设计你的MVC很糟糕,希望你选择的框架可以弥补你的不足,无论你使用Struts还是ATG,它都不会产生很大的不同.如果您理解并使用设计原则,您会发现在框架之间来回切换非常容易.
最好的代码将是在抽象中遵循良好设计原则(例如,真正的MVC)的代码,并使用所选框架中可用的正确工具以它们打算使用的方式实现它(实现它).
回到你的问题;
如果您正在开发ATG项目,则应使用ATG提供的框架.毫无疑问,我可以将Struts变成一个ATG应用程序 - 我多年前就已经完成了这项工作 - 但它的努力远远超过它的价值 - 而且你放弃了许多ATG提供的开箱即用的功能.对象生命周期管理,表单数据绑定等.
如果您即将开始研究新项目并可以选择使用框架 - 我个人会推荐一个开源应用程序服务器(如JBoss)和Spring Framework - 它为您提供ATG和Struts提供的最佳功能.它有一个类似Nucleus的组件容器(应用程序上下文),它集成了所有优秀的ORM解决方案(如Hibernate),并包含一个MVC框架,在我看来,它远远超过了Struts.另外,我建议使用Spring Web-flow进行更高级别的GUI流程设计.
英国的主要区别在于,作为ATG承包商,您每天可以获得500英镑,但作为Struts的一员,您很幸运能获得350英镑.
不是说我很痛苦.