1.隐藏实现
隐藏实现的目的,个人理解,就是为了两个字------省心。编码者不必担心内部数据结构的暴露,使用者也不必费心去了解内部的实现,两者之间的交互只通过接口进行。好比我按照使用说明对ATM进行操作就可以存钱,不需要在银行有熟人。
隐藏实现并不是简单地把变量声明为私有,然后再给他们加上getter和setter-------这比直接暴露实现没有多大进步。
隐藏实现,并不是简单地为成员变量添加一层函数,它实际上是一种抽象------隐藏关乎实现过程的数据结构,并给用户提供一套该数据结构的存取规则------也就是接口,抽象层次的高低决定了接口的好坏,实际上也就决定了数据结构“隐藏”的是否高明。譬如一个表,用户关心的只是它能不能进行增删改查,并不想知道你是用数组还是链表实现的。而上面说的直接为所有变量添加存取方法大概也算得上是一种抽象------没有抽象,因此它并不高明。
2.数据结构和对象的反对称性
这里所说的数据结构指的是面向过程实现的数据结构,只有实现,没有方法。对象可以理解为面向对象的数据结构,隐藏了数据结构的内部实现,为用户提供了操作数据结构的方法,也就是接口。这里首先说的是,面向对象的实现并不是“纯然的好”,面向过程的实现也不是“必然的恶”,用一句废话来说,采用哪种方式实现,取决于需求。当你的需求是添加新的数据类型而不是新函数的时候,对象和面向对象的实现就比较合适。当你需要的变化主要来自添加新方法的时候,面向过程的实现更好。这就是数据结构和对象的反对称性。
3.The Law of Demeter(迪米特法则) ------talk only to your immediate friends
为了尽量少的违反迪米特法则,应该尽量使用纯粹的实现方法 ------ 要么数据结构,要么对象。
4.不要在DTO或ACTIVE RECORD中塞入业务逻辑
DTO(Data Transfer Objects):是一种精炼的纯粹的数据结构,没有函数或者只有getter方法。
Active Record是DTO的一种特殊形式,它还具有一些如save,find这样的函数,这种数据类型通常是数据库表的直接翻译。
在使用时,要把它们当成纯粹的数据结构而不是对象,不要试图在其中添加业务逻辑。