从“罘罟”到服务的抽象性与可复用性

最近在学习面向服务的一些原则,有此随感。

早上起来看新闻,看到说烟台的芝罘区发生了什么什么,具体内容我不作过多评论,如果是真的我深表同情,并且希望以后不要再发生这种事了,但是现在没有一个官方的论断,我就暂时秉着不信谣不传谣的原则,看看后续再说。

重点当然不是这个新闻,而是烟台的那个区;我不认识这个字。查了一下,这个字念fú,音同“福”,意思是抓兔子的网(当然也有人说是抓野兽的网),后来泛指狩猎用的网。然后芝罘是一座山的名字,相传秦始皇曾经到这里求取仙丹。

按理来说,这个问题到这里就可以结束了,不过,这个字让我想到《孟子》里那篇经典的《寡人之于国也》,里面有个很相似的字(至于为什么我会想到这个,因为我上大学之前的个人爱好是训诂,当然仅仅是爱好,连研究都算不上):

数罟不入洿池,鱼鳖不可胜食也。

没错,我说的就是这个“罟”字,我依稀记得,这个字的意思是细密的渔网。这两个字确实长得有点像,一个是捕兽网,一个是捕鱼网,合起来也有一个共同的意思,就是标题里说的那个“罘罟”,用来代指猎人捕猎的工具。

事实上,这种两个近义字组合在一起,表达一个更泛化、更抽象的含义的用法,是很常见的,在现代汉语里尤为常见,比如雕刻、盗窃、富裕;不过我不研究这个,如果不太严谨,也请不要介意,反正是那个意思。

扯到现在,我想说的其实是服务的抽象性与可复用性。这两者之间有什么联系?你想啊,一个词如果抽象了,他的表达能力应该是变强了(在很久之前我思考过这个问题),比如说“网”这个字,取决于上下文,既可以指那种用来捕猎的网,又可以指计算机网络。高度的抽象带来的是高度的可复用,因为他可以用在不同的上下文中,而不必进行调整;我“上网”是网,我“撒网”还是网,这个网字是没有变的。

但是,高度的抽象一定好吗?也不一定。因为光一个网字说不清楚是哪个网,我们必须加上其他的字来明确上下文,这样交流的双方才能相互理解。是“用绳线等结成的捕鱼捉鸟的器具”,还是“互联网”?这得看我是“撒”,还是“上”。如果我不说清楚,你就得再问我一句“pardon?”。在这一点上,罘、罟两个字就有他的好处,因为我说了罘,你就知道是抓野兽的网,我说了罟,你就知道是捕鱼的网。

这跟服务是一样的,过分追求抽象和复用,导致服务合约的信息不足,实际上是不利于服务的实现和复用的。服务合约发布的信息越少,消费者程序需要知道的服务实现的信息就越多,反而会产生额外的耦合。粒度过粗的服务会给服务消费者强加数据转换和处理的需求,这是我们不希望看到的。

相对应地,完全不抽象也是不好的。试想,我们有没有必要针对抓每一种鱼的网都造一个字呢?好像也没必要,反正都是鱼,抓起来也差不多,用一个字来代替就足够了,造那么多字第一个是麻烦,第二个是难道我每发现一种新鱼就要造一个字吗?同理,如果有一种鱼灭绝了,我还得删掉一个字,这显然不合理。放到服务上也是一样,比如定位服务,我总不能为每一个牌子的手机都搞一个定位服务,搞一个通用的手机定位服务就好了。

从某种程度上来说,语言就像是一个巨大的服务库存,人和人之间通过标准化的语法和语义(服务合约),调用高度复用和抽象的词语(服务)进行数据交换。一个词语的定义就好像是服务的元信息。比如“网”这个字,从服务抽象的角度去看:

  • 它的技术信息是什么?它发布了调用方式,对应的是词性,这个字是名词,必须作为主语或者宾语;它隐藏了它消耗的资源,我们说这个字的时候会消耗什么,比如说这个字的时候会消耗多少热量,或者别的什么,我们在说话(调用)的时候根本不会关心。
  • 它的功能信息是什么?它发布的功能信息是它的语义,用这个字我们可以表达的含义,可以指“用绳线等结成的捕鱼捉鸟的器具”,也可以指“互联网”,还可以指别的内容。
  • 它的逻辑信息是什么?它隐藏了这个字造字乃至简化的过程,比如是看到两根木棍中间几根绳子造的字,然后从甲骨文一路演化过来,这些我们在说话和使用的时候根本不会关心。
  • 它的质量信息是什么?它发布了这个字的语言环境,这个字只能用在汉语中,放到外语里人家根本不知道是啥。

而如果从服务复用的角度去看,这个服务毫无疑问是高度复用的,而且对应的语义也是唯一的,网就是网,没有第二个字代表同样的含义(这一点我不确定,我没查到第二个字)。但是这也带来了隐含的风险,比如,就像小时候看的故事里写的一样,假如有一天,我们全体失去了对网这个字的记忆(单点失效),因为没有替代品,那整个语言体系(服务系统)岂不是瘫痪了吗?当然,从语言角度来说,这只是臆想;但是在服务系统中,这个情况还是经常出现的。所以,我们一般会准备冗余,也就是“同义词”,可以相互替换。

我个人认为,说到底,抽象和复用还是一个粒度的问题。粒度合适的服务很自然地就可以实现抽象和复用。什么粒度比较合适呢?根据目前的经验,我倾向于只抽出上下文无关的部分,后续有必要的时候再进行添加。“上网”,“上”和“网”两个服务进行组合,高度复用,简洁优雅。如果未来发生了变化,我们再赋予“上”和“网”新的含义就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章