從“罘罟”到服務的抽象性與可複用性

最近在學習面向服務的一些原則,有此隨感。

早上起來看新聞,看到說煙臺的芝罘區發生了什麼什麼,具體內容我不作過多評論,如果是真的我深表同情,並且希望以後不要再發生這種事了,但是現在沒有一個官方的論斷,我就暫時秉着不信謠不傳謠的原則,看看後續再說。

重點當然不是這個新聞,而是煙臺的那個區;我不認識這個字。查了一下,這個字念fú,音同“福”,意思是抓兔子的網(當然也有人說是抓野獸的網),後來泛指狩獵用的網。然後芝罘是一座山的名字,相傳秦始皇曾經到這裏求取仙丹。

按理來說,這個問題到這裏就可以結束了,不過,這個字讓我想到《孟子》裏那篇經典的《寡人之於國也》,裏面有個很相似的字(至於爲什麼我會想到這個,因爲我上大學之前的個人愛好是訓詁,當然僅僅是愛好,連研究都算不上):

數罟不入洿池,魚鱉不可勝食也。

沒錯,我說的就是這個“罟”字,我依稀記得,這個字的意思是細密的漁網。這兩個字確實長得有點像,一個是捕獸網,一個是捕魚網,合起來也有一個共同的意思,就是標題裏說的那個“罘罟”,用來代指獵人捕獵的工具。

事實上,這種兩個近義字組合在一起,表達一個更泛化、更抽象的含義的用法,是很常見的,在現代漢語裏尤爲常見,比如雕刻、盜竊、富裕;不過我不研究這個,如果不太嚴謹,也請不要介意,反正是那個意思。

扯到現在,我想說的其實是服務的抽象性與可複用性。這兩者之間有什麼聯繫?你想啊,一個詞如果抽象了,他的表達能力應該是變強了(在很久之前我思考過這個問題),比如說“網”這個字,取決於上下文,既可以指那種用來捕獵的網,又可以指計算機網絡。高度的抽象帶來的是高度的可複用,因爲他可以用在不同的上下文中,而不必進行調整;我“上網”是網,我“撒網”還是網,這個網字是沒有變的。

但是,高度的抽象一定好嗎?也不一定。因爲光一個網字說不清楚是哪個網,我們必須加上其他的字來明確上下文,這樣交流的雙方纔能相互理解。是“用繩線等結成的捕魚捉鳥的器具”,還是“互聯網”?這得看我是“撒”,還是“上”。如果我不說清楚,你就得再問我一句“pardon?”。在這一點上,罘、罟兩個字就有他的好處,因爲我說了罘,你就知道是抓野獸的網,我說了罟,你就知道是捕魚的網。

這跟服務是一樣的,過分追求抽象和複用,導致服務合約的信息不足,實際上是不利於服務的實現和複用的。服務合約發佈的信息越少,消費者程序需要知道的服務實現的信息就越多,反而會產生額外的耦合。粒度過粗的服務會給服務消費者強加數據轉換和處理的需求,這是我們不希望看到的。

相對應地,完全不抽象也是不好的。試想,我們有沒有必要針對抓每一種魚的網都造一個字呢?好像也沒必要,反正都是魚,抓起來也差不多,用一個字來代替就足夠了,造那麼多字第一個是麻煩,第二個是難道我每發現一種新魚就要造一個字嗎?同理,如果有一種魚滅絕了,我還得刪掉一個字,這顯然不合理。放到服務上也是一樣,比如定位服務,我總不能爲每一個牌子的手機都搞一個定位服務,搞一個通用的手機定位服務就好了。

從某種程度上來說,語言就像是一個巨大的服務庫存,人和人之間通過標準化的語法和語義(服務合約),調用高度複用和抽象的詞語(服務)進行數據交換。一個詞語的定義就好像是服務的元信息。比如“網”這個字,從服務抽象的角度去看:

  • 它的技術信息是什麼?它發佈了調用方式,對應的是詞性,這個字是名詞,必須作爲主語或者賓語;它隱藏了它消耗的資源,我們說這個字的時候會消耗什麼,比如說這個字的時候會消耗多少熱量,或者別的什麼,我們在說話(調用)的時候根本不會關心。
  • 它的功能信息是什麼?它發佈的功能信息是它的語義,用這個字我們可以表達的含義,可以指“用繩線等結成的捕魚捉鳥的器具”,也可以指“互聯網”,還可以指別的內容。
  • 它的邏輯信息是什麼?它隱藏了這個字造字乃至簡化的過程,比如是看到兩根木棍中間幾根繩子造的字,然後從甲骨文一路演化過來,這些我們在說話和使用的時候根本不會關心。
  • 它的質量信息是什麼?它發佈了這個字的語言環境,這個字只能用在漢語中,放到外語里人家根本不知道是啥。

而如果從服務複用的角度去看,這個服務毫無疑問是高度複用的,而且對應的語義也是唯一的,網就是網,沒有第二個字代表同樣的含義(這一點我不確定,我沒查到第二個字)。但是這也帶來了隱含的風險,比如,就像小時候看的故事裏寫的一樣,假如有一天,我們全體失去了對網這個字的記憶(單點失效),因爲沒有替代品,那整個語言體系(服務系統)豈不是癱瘓了嗎?當然,從語言角度來說,這只是臆想;但是在服務系統中,這個情況還是經常出現的。所以,我們一般會準備冗餘,也就是“同義詞”,可以相互替換。

我個人認爲,說到底,抽象和複用還是一個粒度的問題。粒度合適的服務很自然地就可以實現抽象和複用。什麼粒度比較合適呢?根據目前的經驗,我傾向於只抽出上下文無關的部分,後續有必要的時候再進行添加。“上網”,“上”和“網”兩個服務進行組合,高度複用,簡潔優雅。如果未來發生了變化,我們再賦予“上”和“網”新的含義就好了。

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