Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Struts操作和组合优于继承_Java_Design Patterns_Oop_Struts - Fatal编程技术网

Java Struts操作和组合优于继承

Java Struts操作和组合优于继承,java,design-patterns,oop,struts,Java,Design Patterns,Oop,Struts,当我想要应用DRY原则时,即为了统一不同用例(例如管理员角色和操作员角色)的多个Struts操作的代码,一个选项是为操作使用抽象基类“BaseAction”,然后使用“AdminAction Extendes BaseAction”和“OperatorAction Extendes BaseAction”。我将为抽象NewBaseAction、UpdateBaseAction、DeleteBaseAction、ListBaseAction应用继承 但有一个原则是“偏爱组合而非继承”()。有没有办

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

但有一个原则是“偏爱组合而非继承”()。有没有办法通过使用接口以干净的方式实现这一点

语句“偏好组合而非继承”这是一条总体上更好设计的线索。Struts之类的框架引入了自己的编程模型。因此,您应该按照Struts最佳实践的方式编写Struts操作

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

找到DRY原则的“Struts方式”用例。更多Struts最佳实践可以在免费书籍中找到,作为旁注:

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

支持组合而不是继承”的解决方案是:

  • 将共享代码移动到所有相关
    操作使用的单独的非
    操作
    类中,或
  • 将不同的代码移动到一个单独的非
    操作
    类中,并拥有一个可以使用这些行为的
    操作
  • 我已经有几年没有使用Struts了,但我认为对于(2)来说,您需要在
    Struts config.xml
    中使用不同的参数配置同一
    操作
    类的多个
    s,让
    操作
    能够根据参数加载或选择不同的行为实现。这似乎有点不严谨,因为它采用了一些通常在
    struts config.xml
    中存在的控制逻辑,并将其隐藏在代码中

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

    组合方法是否值得做可能取决于您需要共享哪些代码,以及尝试将这些代码从Struts样板中分离出来是否有意义

    在我使用的最后一个Struts应用程序中,我们使用了继承。也许这是正确的选择,也许我们只是不知道更好