DRY 原则来自于《Pragmatic Programmer》即《务实的程序员》这本书。DRY 是英文 Don’t Repeat Yourself 的缩写,从字面上理解就是不要重复你的代码,但是作者其实说的是知识,更准确的定义是”每一份知识都必须在系统中拥有单一的,无歧义的,权威的代表“。
很抽象是不是,我们可以举例来说明这个问题,假设我们的系统中有一个业务逻辑是付款 (payment),那么付款业务的代码应该只能在你的系统中出现一次,也就是说在系统中只能有一个付款模块。我们关于如何付款,付款方式,付款的流程都由付款代码负责。如果我们的系统由二十处地方要用到付款业务,我们绝不能把付款业务的代码写在二十多个地方,这不仅仅是为了修改方便,更重要的是在出现付款业务的问题的时候,我们能够明确的找到问题所在的地方。
即使我们满足了业务知识只出现在单一模块中,在单一的模块中,我们也要求业务逻辑精炼地集中在一起。比如下面的代码负责在汽车组装之前检查零部件是否齐全。
public boolean Validate(ArrayList<String> parts) throws Exception
{
if(!parts.contains("wheel"))
throw new Exception("This car doesn't have wheels