2.2 信息专家 Information Expert

构思了好几天终于要搞一搞 信息专家 了,毕竟我曾被这个概念玩残了好多年。提到专家,有时候觉得真的挺悲哀,专家在中国竟然有时候成为了脑残的代名词。不管是每年春节后的两会提案,还是平时听到的某些站台专家的“高谈阔论”,都让人怒不可遏,恨不得除之而后快(要和平,不要暴力)。很多都成了另舆论哗然的挑战公众智商和社会底线的社会话题。那在这里就有了一个问题,Ta们真的是脑残吗?答案肯定是否定的;那他们是“专家”吗?除掉那些鱼目混珠之流,有些人还真是专家。那问题就来了,如果他们是专家,那为什么会说出那么脑残的话?

 

问题就处在“跨界”,平时看娱乐节目,明星们跨界,说说相声啊,唱唱歌啊,跳跳舞啊,这些无所谓,毕竟本质上都是娱乐明星,他们的核心职责就是娱乐大众,跨跨“小界”没啥关系,因为他们自身的 娱乐属性 和他们表现出来的 娱乐行为 是匹配的,所以不会有问题。但是“专家”就不同了,之所以称之为专家,那他必定要在某一个“领域”的掌控程度够深够精够专,一般人达不到,所以称之为专家,而区分一般专家和大师级专家的一个重要标志就是:“信息”。高级专家必定是在专业领域的“信息”方面更牛X的一批人,他们拥有的“信息”的质量和层次是一般专家所不能比的,甚至可能都不在一个维度,是存在次元差的。很多专家之所以被成为“所谓专家”,是因为他本来是“婚姻专家”,却非要在没有怎么接触过的“编程领域”高谈阔论。

 

我想说到这里,大家对“信息专家”这个名词应该有点感性的认识了,接下来咱们看一看 GRASP 提出者 辣馒 的专业表述: "如果某个类能够完整表达某方面的信息,足以实现某个责任,那它就是可以拥有这个职责的信息专家"

 

不瞒各位,当年我还是技术方面的小白的时候,看到这个定义,我电脑都举起来了,可想了想电脑是自己的,太心疼了舍不得,但是情绪已经到位了,得干点啥发泄一下才行,于是把室友的键盘给摔了,心里顿时舒服多了。不好意思,当时我的心理是如此的暗黑,以至于成为了一个“破坏神”,但是这一摔惊醒梦中人:键盘又不是我的,我有啥资格摔,它是我的 ‘信息’ 吗?我是它的 ‘信息专家’ 吗?“摔键盘” 这个行为是我的 ‘职责’ 还是室友的 “职责”啊?

 

其实这就是 信息专家 的内涵,GRASP 是 “职责分配” 的原则,那我们学习 GRASP 就要紧紧围绕在以 职责分配 为中心的指导思想下进行。很多技术人员之所以不能领悟很多技术用语,不在于他们技术能力差,而是太专注技术层面,或者说太专注“代码实现”了。而绝大部分技术问题,都可以从社会问题上找到答案。让最专业的人干最专业的事,这是普遍被认可的一条社会效率法则,而 社会分工体现的恰恰就是职责分配,每一个社会分工中都会有一大批人,他们处在这个分工之中,但未必 “专业”,能够做到 “专业” 的人只有很小的比例。但是到了软件领域则不同,我们分析出来的对象它必须要是绝对的“专家”,绝不能狗拿耗子多管闲事,因为 “闲事” 不是它的职责,这也体现了SOLID编程原则中 “单一职责原则” 的精神,但是 “信息专家” 原则并不能简单的等同于 “单一职责原则” ,因为 “信息专家” 表达了更丰富的内涵,这也是为什么 GRASP 和 SOLID 我会分成两个图书专题来讲,当然 SOLID 这个图书专题目前我还没有创建。

 

“信息” 二字也非常重要,对象封装的全部 “属性” 定义了这个对象是哪方面的“专家”,似乎这话还是有点绕。可以再直白一点,那就是 “数据” 本身并等同于信息,比如数字 175,我们不知道它代表什么,如果它是 “身高属性” ,那身高 175 就能够表达某一项信息(身高信息),这是一种粒度很小的信息;如果 User 对象只有这么一个属性数据,那他还不能“完整且充分”得表达出这是一个人信息。我们现在要得是 “某一方面” 的信息,但是我们可以翻译一下 “某一方面” 为 “必要属性”。“一个身高 2.26的名叫姚明的超级牛掰男性篮球运动员”这表达出来的就是完整的描述一个人 “这一方面” 的信息。那我们可以抽象出一个类 User,它在当前的这个系统中,必须要负责管理的数据就是 用户身高(2.26),用户性别(男),用户姓名(姚明),用户职业(篮球),用户技能水平(超级牛掰)。那其他的数据不要了吗?比如出生年月,手机号码,电子邮件,如果这些数据项当前的项目完全用不到,那它们就不是必要的属性,“用户”这个“信息专家”也就没有“职责”去管理这些信息并为它们抛头颅洒热血。

 

而到了电商系统中,用户的年龄,收入水平,爱好,家庭人员等则会成为“传递出一个人是什么样人这个关键信息的"必要属性,不要以为我们平时在京东淘宝这些电商平台购物的时候没有输入这些信息,它们就拿不到这些信息,我们在应用中的操作早就彻头彻尾的出卖了我们。我们的用户画像信息精准且“完整”。既然说到电商了,那咱们就以电商平台为例吧,我写起东西还真挺意识流的,本来没想用电商平台举例。用户,购物车,订单,支付,交易,用户是咱们比较容易想到的电商系统中的信息专家,它们职责分明,分工合作,共同构建了“电商系统”的基础。订单就是负责订单的,不能闲的没事去修改用户封装的数据,用户也不能越俎代庖的去修改交易记录的数据,要修改的话,也得“交易”去修改,不是你的键盘,不要随便摔。

 

那说说说最后一个问题,为什么说“信息专家”并不单纯指代“单一职责原则”?为什么“信息专家”的内涵更丰富?那咱们还是要回到项目的阶段中,我们之前说过,GRASP 重要在项目的 需求分析,系统分析,系统设计 三个阶段中起作用,但 SOLID 和 GoF 设计模式 都主要在系统设计阶段施展才华。而需求分析和系统分析时最重要的事情就是识别出能够描述业务场景中具有关键作用的对象,并抽象出“类”。GRASP 的“信息专家”原则恰恰就是在这个过程中寻找对象并分配职责的最重要的方式方法,这项工作完成的质量好坏,直接决定了项目后续阶段能否高质量的完成。这也是为什么“信息专家”是GRASP最重要的原则,也是为什么它是排在第一位的原则。

 

OK,写累了,但希望我说清楚了,最后呢,用另一种大家耳熟能详的说一说使用“信息专家”进行职责分配需要遵循的方针政策,这话不是我说的,而是咱们敬爱的 周总理 说的和平共处五项基本原则:

 

“互相尊重主权和领土完整,互不侵犯,互不干涉内政,平等互利,和平共处”

 

自己的事情要做好,自己的事情自己做,别人的事儿别掺和。谨遵总理教诲 ~