2009-10-01 31 views
4

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

但有一个原则,说:“支持组成继承”(http://www.artima.com/lejava/articles/designprinciples4.html)。有没有办法通过使用接口以干净的方式实现这个?

回答

2

声明“赞成组合优于继承”这是一般设计更好的线索。像Struts这样的框架引入了自己的编程模型。所以你应该以坚持Struts最佳实践的方式编写Struts动作。

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

查找“Struts方式”DRY原理的用例。多个支柱的最佳实践,你会发现在自由书Struts Survival Guide

+0

感谢您提供免费struts图书的链接 – poseid 2009-10-06 13:23:44

0

补充说明:

考虑到“新”,“更新”往往是非常,非常类似的操作,而且往往是相同的动作,例如,使用单个case语句,而不是两个支持两个不同JSP的不同类。

2

“过度继承利于组合物”的解决办法是任一:

  1. 移动共享码成由所有Action S IN问题使用单独的,非Action类,或
  2. 动议不同代码到一个单独的,非Action类,并有一个Action可以使用任何这些行为。

它一直以来我所做的Struts了几年,但我认为(2)你需要在struts-config.xml有点挂羊头卖狗肉,配置几个<action>相同的S Action类的,使用不同的参数,并具有Action能够根据参数加载或选择不同的行为实现。这似乎有点不Strutsy,因为它需要一些通常在struts-config.xml中的控制逻辑并将其隐藏在代码中。

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

构图方法是否值得做取决于您需要共享哪些代码以及尝试从Struts样板中分离代码是否合理。

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