这个 UI 代码的辅助方法会是什么样子?
How would a helper method for this UI code look like?
我想重构一些 UI 代码。
我有一个 HTML 表单(此处:用 Java GUI 编写,称为 Wicket),我在其中放置了一些链接(锚标签)。
我不想一遍又一遍地重复代码,而是想创建一个新的优雅的辅助方法。
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, ?));
我想避免为此创建一个额外的 class。但是 Lambda 就可以了。
最好的方法是什么?
模式又是如何命名的?
谢谢。
对于 ?
你可以使用 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);
}));
您还可以查看 WicketStuff 中的 this utility class,它的功能与 Ajax 链接非常相似。
我想重构一些 UI 代码。
我有一个 HTML 表单(此处:用 Java GUI 编写,称为 Wicket),我在其中放置了一些链接(锚标签)。 我不想一遍又一遍地重复代码,而是想创建一个新的优雅的辅助方法。
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, ?));
我想避免为此创建一个额外的 class。但是 Lambda 就可以了。
最好的方法是什么? 模式又是如何命名的?
谢谢。
对于 ?
你可以使用 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);
}));
您还可以查看 WicketStuff 中的 this utility class,它的功能与 Ajax 链接非常相似。