面向接口编程
最近在和同事在讨论一个问题,在接口存在的必要性双方存在不一样的看法,当然最后的结果无所谓对错,我觉得这样的讨论的过程,思考的过程都是挺好的。
在讨论“面向接口编程”之前,我想先谈一谈抽象,这是我认为计算机最重要的概念之一。面对如此复杂的世界,我们不可能世界的所有细节都了如指掌,所以,一直以来,人类面对这个复杂的世界的认识方法之一就是抽象,比如“鸟”是对在天上会飞的所有动物的一个抽象,“家具”是对椅子,桌子等物品的一个抽象,甚至椅子本身也是一个抽象的概念,因为椅子可能是三条腿的,也可能是两条腿的。“抽象”在计算机里面更加明显,比如在 Unix 的世界里面,把一切东西都抽象成文件。
抽象能够很好地帮助我们认识这个世界,但是抽象也会带来的一些问题,一个重要的问题就是细节的丢失,现有的抽象不一定可以涵盖未来的细节。因此,我们在开发的过程中时常要会存在这种情况,你抽象的业务模型是能够涵盖目前或者未来的一个阶段的业务的,但是当新的业务来临的时候,可能会出现目前的模型无法描述新的业务的情况,你无法考虑到所有的细节,当你的模型无法描述新的细节的时候,就必须调整原来的模型以应对新的情况。