用户输入验证应该在 class 级别还是 UI 级别完成?

Should user input verification be done at class level or UI level?

假设您有一个控制台应用程序:

Main.javaClassA.java

您的主要 class 包含您 运行 您的程序所在的 public static void main(String[] args) 方法,它使用用户输入作为参数来调用 ClassA 中的方法。

在将参数发送到 ClassA 方法之前,您是否将用户输入验证放在 main 方法中?

您是否将用户输入验证放在 ClassA 方法中,该方法会中继回一条消息以指示输入成功与否?或者抛出异常?

Integer.Parse(...) 在给定无效输入时抛出 NumberFormatException

您可能希望在 classA 中抛出有意义的异常,并让您的主方法决定 if/how 来处理这些异常。当您重用 class A 时,新的调用者可能想要做出其他决定。

我推荐本书 CleanCode(Robert C. Martin)的第 "ErrorHandling" 章。例如 "Define the normal flow"、"Use Exceptions rather than return codes"、"Separate your business logic and your error handling"。

在某些情况下,获得快速反馈很重要...不要等待两个小时计算完成并在 90% 时得到异常。在其他情况下,获得详细的反馈更为重要。另见 Data validation: fail fast, fail early vs. complete validation

检查是否易于阅读您的代码并理解正常流程。每个函数应该只做一个 thing/model 一层抽象。异常处理是一级对象抽象。