【问题标题】:Struts Actions and Composition over inheritanceStruts 动作和组合优于继承
【发布时间】:2010-12-02 22:34:39
【问题描述】:

当我想应用 DRY 原则,即为不同的用例(例如管理员角色和操作员角色)统一多个 Struts 动作的代码时,一种选择是使用抽象基类“BaseAction” ” 用于操作,然后使用“AdminAction extends BaseAction”和“OperatorAction extends BaseAction”。我会为抽象的 NewBaseAction、UpdateBaseAction、DeleteBaseAction、ListBaseAction 应用继承。

但是有一个原则是“优先组合胜于继承”(http://www.artima.com/lejava/articles/designprinciples4.html)。有没有办法通过使用接口以干净的方式实现这一点?

【问题讨论】:

    标签: java design-patterns oop struts


    【解决方案1】:

    声明“优先组合而不是继承”它是总体上更好设计的线索。像 Struts 这样的框架引入了自己的编程模型。因此,您应该以遵循 Struts 最佳实践的方式编写 Struts 操作。

    在您的情况下,编写基类还不错。问题是如何设计动作类层次结构,例如考虑将DispatchAction 用作基本操作类的部分功能。它将使您免于创建许多不必要的类。

    查找 DRY 原则的“Struts way”用例。更多 Struts 最佳实践可以在免费书籍 Struts Survival Guide

    中找到

    【讨论】:

      【解决方案2】:

      “优先组合优于继承”的解决方案是:

      1. 将共享代码移动到一个单独的非Action 类中,供所有相关Actions 使用,或者
      2. 不同代码移动到一个单独的非Action 类中,并拥有一个可以使用任何这些行为的Action

      我做 Struts 已经有几年了,但我认为对于 (2) 你需要在 struts-config.xml 中使用一些技巧,配置相同 Action 类的多个 <action>s,具有不同的参数,并让Action 能够根据参数加载或选择不同的行为实现。这似乎有点非 Strutsy,因为它需要一些通常在 struts-config.xml 中的控制逻辑并将其隐藏在代码中。

      但取决于您的开发文化,这实际上可能被认为是一件好事。

      组合方法是否值得做可能取决于您需要共享哪些代码,以及尝试将该代码与 Struts 样板文件隔离是否有意义。

      我使用的最后一个 Struts 应用程序,我们使用了继承。可能是正确的做法,可能是我们只是不知道更好。

      【讨论】:

        【解决方案3】:

        附注:

        考虑到“new”和“update”通常是非常非常相似的操作,并且通常可以是同一个 Action,只有一个 case 语句,而不是支持两个不同 JSP 的两个不同类。

        【讨论】:

          猜你喜欢
          • 2012-01-26
          • 2013-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-16
          • 2016-10-02
          • 2012-11-01
          • 1970-01-01
          相关资源
          最近更新 更多