gpt4 book ai didi

实践中的 Java 约定 - 从方法返回多个值

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:19 25 4
gpt4 key购买 nike

我有两个关于 Java 约定的问题。我尝试使用 od Robert C. Martin 的“Clean Code”。

以下案例:

public void startProgressIfAllowed() {
try {
tryStartProgressIfAllowed();
} catch (Exception exception) {
// log error
}
}
private void tryStartProgressIfAllowed() {
if (isStartProgressAllowed()) {
stopProgressOnCurrentlyStartedTask();
startProgressOnThisTask();
}
}

private boolean isStartProgressAllowed() {
// Calls JOptionPane.showConfirmDialog with JOptionPane.YES_NO_OPTION.
// Created dialog contains checkbox indicating that saving currently started task is required.
// returns boolean depending on JOptionPane.YES_NO_OPTION clicked button
}

private void stopProgressOnCurrentlyStartedTask() {
// Saves currently started task depending on checkbox selecion property and stops currently started.
// What is the correct way to get checkbox selecion property?
}

建议的解决方案:

public void tryStartProgressIfAllowed() {
if (tryToStopProgressOnStartedTaskIfNecessary()) {
startProgressOnThisTask();
}
}

private boolean tryToStopProgressOnStartedTaskIfNecessary() {
// Calls JOptionPane.showConfirmDialog with JOptionPane.YES_NO_OPTION.
// Created dialog contains checkbox indicating that saving currently started task is required.
// Depending on checkbox selecion property saves task.
// returns boolean depending on JOptionPane.YES_NO_OPTION clicked button
}
  1. 但这种方法不符合“命令查询分离”原则,因为 tryToStopProgressOnStartedTaskIfNecessary(...) 方法执行一些逻辑并返回成功/失败值。
  2. 我认为这种方法也不符合“每个函数一个抽象级别”的原则,因为我认为“检查”和“保存”操作处于不同的抽象级别。
  3. 方法名称是否正确以避免虚假信息?也许更好的名字是 tryToStopProgressAndSaveStartedTaskIfNecessary(...)?

对于上述问题有没有更好的解决方案?

最佳答案

以下情况如何:

public void tryStartProgressOnThisTaskIfAllowed() {
tryStopTaskInProgressIfAllowed()

if (!isTaskInProgress()) {
tryStartProgressOnThisTask();
}
}

private void tryStopTaskInProgressIfAllowed() {
if (!isTaskInProgress()) {
return;
}


TaskInProgressResult result = whatToDoWithTaskInProgress();
if (result == Result.KEEP) {
return;
} else if (result == Result.DROP)
tryDropTaskInProgress();
} else if (result == Result.SAVE) {
trySaveTaskInProgress();
}
}

关于你的观点:

  1. 你现在有两个独立的 C 和 Q 方法
  2. 我认为 whatToDoWithTaskInProgresstryDropTaskInProgress 这两个东西是同一层次的抽象。如果您内联一个或另一个的代码,那您当然是绝对正确的。
  3. 我根据自己的喜好更改了一些方法名称:) 唯一我仍然不喜欢的是“OnThisTask”部分,因为这个任务有点毫无意义。也许只是因为其余代码未知,也许 OnNextTask 或 OnNewTask 更好。

我们遇到的问题是我们在 UI 术语中考虑是/否 + 复选框值。但在这里从商业角度思考要好得多。我确定了三种不同的结果:KEEP、SAVE、DROP 如何获得答案对于调用方法应该无关紧要。

关于实践中的 Java 约定 - 从方法返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27421702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com