微信扫码登录

微信扫码登录

邮箱恶意注册过多,目前只支持微信模式

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

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

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

Iwtrgw 2018.09.15 16:06

博主的写作风格绝对是技术书籍中的另类。简单明了,又不失风趣,还带点儿哲学。老实说看到“我电脑都举起来了”这段的时候笑出了猪叫声。要是当年语文课本都是这种风格我也绝对不会老是不及格了。一点没有其他技术类书籍的枯燥,又很好理解。希望博主继续这种风格写下去。

Codinget 2018.09.15 21:12

我尽力,尽量用大家熟悉的东西进行类比解释清楚这些令人困惑的问题,平时工作都已经很枯燥了,不希望别人看我写的东西也继续痛苦,徒增心理压力

西门撸码 2018.09.15 16:57

我感觉我就是博主说的“太关注代码的人”,总想从代码中分析逻辑和找到解决方法,博主的风格太出人意料了,很犀利的角度和方式

Codinget 2018.09.15 21:15

刚工作的时候大部分人都是这种状态,毕竟工作压力都很大,内容都很多,媳妇还要找,能踏下心来琢磨编程思想确实很难,每天基本都是在代码中度过的

lele 2018.09.15 17:00

收我当徒弟吧,我感觉我都不是来学编程的,感觉平时确实太关注实现层面了,理解问题的角度确实博主比较牛

Codinget 2018.09.15 21:16

不敢好为人师,觉得好多来坐坐客就好,你算是最早注册的一个用户了,我得谢谢你。

kobe 2018.09.15 21:20

这个系列的教程我跟到底,你太用心了,我向你学习,虽然没有一行代码,但是你解释得太通透了

linxb 2018.11.29 10:23

怎么不用markdown的格式来写呢,这样看着好累,没有层次感,字体太大也很不舒服

Codinget 2018.11.29 10:28

有没有层次感其实跟用不用Markdown倒没啥关系,Markdown 只是提供了一种简化的规范,对于没有形成个人风格和选择强迫症来说用着比较舒服,看着累可能真的是跟另外一个朋友一个原因,我把显示范围搞得太宽了,高亮的颜色太重了

linxb 2018.11.29 10:30

是的哈,简单来说就是排版看起来不是很舒服

hikalu 2018.12.05 16:59

希望提供暗色模式,阅读会更舒服

Codinget 2018.12.05 17:02

呃,越来越众口难调了

hikalu 2018.12.05 17:04

哈哈,先做你觉得重要的事情,暗色模式我可以自己调,我没付钱,你不用把我当消费者。嘿嘿

Codinget 2018.12.05 17:06

呵呵,我也没开付费啊

Codinget 2018.12.05 17:10

真开了付费,惨的人是我,不是用户啊

prince 2018.12.19 14:01

大佬,你可以建一个QQ群吗?我们大家都可以进群,随时请教和交流

Codinget 2018.12.19 14:36

群暂时就不建了,就算建了估计我也不会出现在群里说话。我确实没精力维护群了,录视频前的准备工作,录视频和编辑视频都需要花大量时间精力,需要非常专注得去做。如果QQ和微信一直响,一直和大家互动的话,估计啥也干不了了,还望理解!

编程原力 京ICP备17045322号-2
版权所有, 侵权者追究法律责任