【问题标题】:How would a helper method for this UI code look like?这个 UI 代码的辅助方法会是什么样子?
【发布时间】:2020-11-25 06:33:23
【问题描述】:

我想重构一些 UI 代码。

我有一个 HTML 表单(这里:用称为 Wicket 的 Java GUI 编写),我在其中放置了一些链接(锚标记)。 我不想一遍又一遍地重复代码,而是想创建一个新的优雅的辅助方法。

String type = "", id = ""; 
Form form, Service service;

form.add(new Widget("createLink", form) { // the same for read, update, delete
    private static final long serialVersionUID = 1L;
    @Override
    public void onSubmit() {
        try {
            service.create(type, id);  // the same for service.read / update / delete
            info("Specific message for create, read, update, delete");
        } catch (DataAccessException e) {
            error(ExceptionUtils.getRootCauseMessage(e));
        }
    }
});
form.add(new Widget("readLink", form) {
    // ... service.read(...); info("... read ...");
});
form.add(new Widget("updateLink", form) {
    // ... service.update(...); info("... update ...");
});

正如你已经猜到的那样,我想要……。喜欢

form.add(createLink(htmlId, form, type, id, message, ?));

我想避免为此创建一个额外的类。但是 Lambda 就可以了。

最好的方法是什么? 而模式又是怎么命名的?

谢谢。

【问题讨论】:

  • 我认为您正在寻找的是策略模式,因为在您的表单添加方法中,您正在传递不同的实现小部件

标签: java refactoring wicket


【解决方案1】:

对于?,您可以使用java.util.function.Consumer

private void createLink(String htmlId, Form<?> form, String type, String id, String feedbackMessage, Runnable _onSubmit) {
    return new Widget(htmlId, form) {
      private static final long serialVersionUID = 1L;

      @Override
      public void onSubmit() {
        try {
          _onSubmit();
          info(feedbackMessage);
        } catch (DataAccessException e) {
          error(ExceptionUtils.getRootCauseMessage(e));
        }
      }
    }
}

用法:

form.add(createLink("createLink", form, type, id, createMessage, () -> {
  service.create(type, id);
}));

【讨论】:

  • 谢谢。这是一个很好的解决方案。为什么在示例中选择 Runnable(而不是 Consumer 本身)?
  • 因为 Consumer 有一个类型 (&lt;T&gt;),在你的情况下你必须使用 Void 类,并在调用它时传递 null
【解决方案2】:

您还可以查看来自 WicketStuff 的 this utility class,它与 Ajax 链接的作用非常相似。

【讨论】:

  • 太棒了。在特定的上下文中,这(组件工厂)甚至更好。
猜你喜欢
  • 2019-02-27
  • 1970-01-01
  • 2015-07-07
  • 2011-02-04
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多