觀察者是不是有自己感興趣的事件?是被動地讓觀察者獲得通知,還是讓觀察者來主動獲?。咳绻^察者和目標之間有更復雜的關(guān)系怎么辦?是不是要把歷史的通知都記錄下來? 你可以任意展開想象。很有趣,對嗎?如果你擁有豐富的生活閱歷,也許會想到更多有價值的事情。不過請記住,所有想象的前提,都是基于最初提到的隱喻。
隱喻使你的想象變得集中而有條理。對于有經(jīng)驗的小程序二次開發(fā)人員來說,編程,只是用一種語言表達想象的過程,基本上沒有任何難度。這就是隱喻的價值。軟件架構(gòu)中的隱喻與設(shè)計模式中的隱喻沒有什么不同。如果一定要說出一些不同的話,那就是,在使用隱喻來構(gòu)架軟件系統(tǒng)的過程中(準確地說,在想象的過程中),還需要考慮很多約束條件。這些約束條件的判斷和取舍,來自軟件架構(gòu)師的經(jīng)驗。這個過程幾乎無法用邏輯思維的語言來描述,這有點像指揮一次戰(zhàn)役:戰(zhàn)場上的形勢瞬息萬變,沒有哪一本教科書可以告訴你永遠正確的行動計劃。
不是所有的隱喻都直接有助于小程序二次開發(fā),只有越簡單的隱喻才越有價值。在軟件開發(fā)中,抽象的特征,是簡化對事物的主觀認識,隱喻的目標是抽象,因此,隱喻也肩負著簡化認識的使命。例如,在觀察者模式中,既不必把觀察的地點轉(zhuǎn)移到黑洞附近,也不必對觀察者是否高度近視耿耿于懷(如果一定要解決這些問題,應(yīng)該在不破壞簡單隱喻的前提下,以更靈活的方式對這類特殊情況進行抽象)。所以說,抽象能力決定了隱喻的好壞。隱喻的另一個重要作用,是便于團隊成員的交流。以大連考試軟件開發(fā)設(shè)計模式為例,觀察者的隱喻可以使Observer模式被大眾快速接受并理解。我想象不出,如果換一種方式,知識的傳遞還會這么有效嗎?
軟件架構(gòu)中的隱喻也具有同樣的功能。在一種簡單隱喻之下,團隊成員對正在開發(fā)的產(chǎn)品有一種共同的想象,這會大大激發(fā)團隊創(chuàng)造的化學反應(yīng)。場景故事點評:孔如之把業(yè)務(wù)領(lǐng)域的故事與技術(shù)實現(xiàn)完全對應(yīng)起來了。他認為,在架構(gòu)中,要有一個和需求故事對應(yīng)的層。這個層完全由接口組成。它代表了故事的結(jié)構(gòu)和線索。這將使程序的結(jié)構(gòu)也能像故事一樣層次清晰。這種做法,本質(zhì)上是一種隱喻式開發(fā),具有豐富的想象力和創(chuàng)造力。隱喻和想象,在小程序二次開發(fā)中占有重要的地位??墒?,如何進行想象才能產(chǎn)生出好的隱喻呢?除了前文中提到的簡單原則和約束原則之外,還需要具備哪些條件,才可以開始為了設(shè)計軟件而展開想象呢?