这绝对是一个语言不可知论的问题,而且这个问题已经困扰了我很长一段时间了。一个例子可能会帮助我解释我面临的困境:一种方法应该承担多少责任?
让我们说我们有一个方法负责读取文件,用一些对象(它存储来自文件的信息)填充集合,然后返回集合......类似如下:
public List<SomeObject> loadConfiguration(String filename);
让我们也说,在实施该方法时,它似乎不可行的应用程序继续,如果集合返回的是空(0大小)。现在,问题是,是否应该在该方法内进行验证(检查空集合并可能随后抛出异常)?或者,这种方法的唯一责任是执行文件的加载并忽略验证的任务,允许在方法之外的某个阶段进行验证?
我想一般的问题是:是否更好地将验证与实际正在执行的任务分离?一般而言,这会使事情在稍后的阶段更容易改变或建立 - 就我上面的例子而言,在稍后的阶段可能会出现这样的情况,即增加不同的策略以从空的事件中恢复从'loadConfiguration'方法返回集合.....如果在方法中完成验证(以及生成的异常),这将会很困难。
也许我在寻求一些教条式的回答时过于迂腐,反而它只是依赖于使用方法的上下文。无论如何,我会非常感兴趣的是看到别人对此有何评论。
谢谢大家!
我明白这样的建议的好意,但它有煽动过度工程的风险。 – MaD70 2009-10-19 18:45:56
@我同意的范围内的MaD70;然而,如果要使用单元测试,保持小而简单的事情将极大地帮助保持代码的可维护性。如果它是一个微小的系统,那么我同意你的观点。然而,根据我的经验,最好始终将单一责任抽象出来,否则间接错误的风险会增加。 – JamesEggers 2009-10-19 19:36:07