这肯定是一个与语言无关的问题,而且现在已经困扰了我很长一段时间了.一个例子可能会帮助我解释我面临的两难困境:
让我们说我们有一个方法负责读取文件,用一些对象(存储文件中的信息)填充集合,然后返回集合......如下所示:
public List<SomeObject> loadConfiguration(String filename);
Run Code Online (Sandbox Code Playgroud)
我们还要说,在实现此方法时,如果返回的集合为空(大小为0),则应用程序继续运行似乎是不可行的.现在,问题是,该方法中是否应该进行此验证(检查空集合以及可能后续抛出异常)?或者,此方法应该唯一的责任是执行文件的加载并忽略验证任务,允许在方法之外的某个稍后阶段进行验证?
我想一般的问题是:将验证与方法执行的实际任务分离是否更好?通常,这会使事情在稍后阶段变得更容易改变或构建 - 在上面的例子的情况下,在稍后阶段可能会出现这样的情况,其中添加了不同的策略以从空事件中恢复从'loadConfiguration'方法返回的集合......如果在方法中完成验证(以及产生的异常),这将是困难的.
也许我在寻求一些教条式的答案时过于迂腐,相反,它只是依赖于使用方法的上下文.无论如何,我会非常有兴趣看到其他人对此有何看法.
谢谢大家!
我的建议是坚持单一责任原则,简而言之,每个对象应该有1个目的.在这种情况下,您的方法有3个目的,如果计算验证方面则为4.
以下是我对如何处理此问题以及如何为将来的更新提供大量灵活性的建议.
保留LoadConfig方法
让它调用一种新方法来读取文件.
将前一个方法的返回值传递给另一个方法,以将文件加载到集合中.
将对象集合传递给某些验证方法.
退回收藏.
这是最初采用1种方法并将其分为4种,其中一种是另外3种.这应该允许你改变对他人没有任何影响的作品.
希望这可以帮助