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