Struts Actions and Composition over inheritance
当我要应用dry原则时,即为了统一不同用例(例如,管理员角色和操作员角色)的多个struts操作的代码,一个选项是对该操作使用抽象的基类"base action",然后使用"adminaction extends baseaction"和"operatoraction extends baseaction"。我将为抽象NewBaseAction、UpdateBaseAction、DeleteBaseAction和ListBaseAction应用继承。
但是有一个原则说"喜欢组合胜过继承"(http://www.artima.com/lejava/articles/designprinciples4.html)。有没有一种方法可以通过使用接口以干净的方式实现这一点?
"有利于组合而非继承"的解决方案是:
我做Struts已经有好几年了,但是我认为(2)在
但这取决于你的发展文化,这可能是一件好事。
组合方法是否值得做,可能取决于您需要共享什么代码,以及尝试将代码与Struts样板文件分离是否有意义。
我上一次使用Struts应用程序时,我们使用了继承。可能是正确的事情,可能只是我们不知道更好。
声明"赞成组合而不是继承",这是总体上更好设计的线索。像Struts这样的框架引入了自己的编程模型。所以您应该按照Struts最佳实践的方式编写Struts操作。
在您的案例中,编写基类也不错。问题是如何设计操作类层次结构,例如,考虑将部分功能的DispatchAction用作基本操作类。这样可以避免创建大量不必要的类。
找到Dry原理的"struts-way"用例。更多Struts最佳实践,您可以在免费书Struts生存指南中找到。
作为旁注:
考虑到"new"和"update"通常是非常非常类似的操作,并且通常可以是相同的操作,例如,使用一个case语句,而不是支持两个不同JSP的两个不同类。