【问题标题】:Does Struts action class violate SRP?Struts 动作类是否违反 SRP?
【发布时间】:2018-01-04 22:05:09
【问题描述】:

如我所见,Struts 2 中的动作类有多重职责。

首先,我们经常将验证逻辑放在动作类的 validate 方法中。 所以当验证逻辑发生变化时,我们必须打开类进行修改。

其次,action类负责制作JSP文件使用的结果。所以当我们打算修改视图的时候,往往需要同时修改action类和JSP。

第三,action 类必须知道其他类的 API 才能运行业务逻辑并知道如何处理返回的结果。

最后,动作类的代码变得一团糟。 有没有更好的方法让动作类干净? 或者有一本书教如何编写干净的动作类代码?

【问题讨论】:

    标签: struts2 coding-style single-responsibility-principle


    【解决方案1】:

    动作类是一个简单的 POJO。你可以随心所欲地清理它,只需要实现Action interface

    处理程序类的默认入口方法由Action接口定义。

    Action接口:

    public interface Action {
        public String execute() throws Exception;
    }
    

    【讨论】:

      【解决方案2】:

      首先,我们经常将验证逻辑放在动作类的 validate 方法中。所以当验证逻辑发生变化时,我们必须打开类进行修改。

      这是你的选择,但我不会。一般来说,验证逻辑应该通过 XML 配置来处理。如果您有复杂的验证逻辑,则应将其隔离在其自己的处理程序中,然后用作自定义验证器或由validate 中的薄层调用。

      S2 操作是 Web 层和业务逻辑之间的外层——这包括验证。

      其次,action类负责制作jsp文件使用的结果。所以当我们打算修改view的时候,往往需要同时修改action class和jsp。

      动作类可以用作业务层和视图层之间的 DTO,或者您可以使用单独的实体并使用动作仅公开该 DTO。无论如何,这几乎都是必要的——再次,动作充当请求和响应之间的薄层。您选择如何组织它取决于您。

      第三,action 类必须知道其他类的 API 才能运行业务逻辑并知道如何处理返回的结果。

      嗯,是的。位于请求和业务逻辑之间的任何东西都需要知道该做什么。也就是说,它不会必须这样做,它可以将数据从请求传输到业务逻辑。到业务逻辑的映射根本不需要硬编码。

      最后,动作类的代码变得一团糟。

      那是你的错,不是 S2 的。

      【讨论】:

        猜你喜欢
        • 2013-07-22
        • 2017-06-03
        • 2013-04-28
        • 2020-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多