先前因為在 博X來 訂購書籍的過程時,卡在選擇 7-11 門市的小功能這邊(據稱當日有部 Server 故障),有感而發寫了篇:「實在難以忍受的網路購書流程」。不過不滿歸不滿,後來我還是在該網站陸續訂購了有約 10 來本書籍,可以說是他們的忠實客戶。倒是後來該篇文章有許多網友們的諸多回應,其中也有提到了 EC系統整合 的議題。 系統整合? 一開始看到我還稍微愣了下,雖然我本身的工作就是專注在軟體系統的架構整合,不過我倒是沒想過 {選擇 7-11 門市} 這個小功能有如此慎重。因為,從單一目的來看,真的很單純,就只是 {提供 7-11 門市} 的資訊,在這個時間點可沒有涉及到還有物流出貨什麼的,那是等系統收集到完整的訂購資訊之後,也就是真正客戶按下 {確認訂購} 按鍵之後,訂購系統才需要去處理的工作。但在收集訂購資訊的過程中,只要能取得如 門市代號, 門市名稱等未來可供出貨參考的資訊即可。可不要在此時就把出貨流程給牽扯在一起,諸多熟悉領域知識的 SA,有時候就是想太遠了,常常會把簡單的事情給複雜化。
不過,平心而論,該功能雖小,但就從系統責任分派 (responsibility assign)的角度來看,誰需要提供 {7-11 門市} 的資訊? 統X EC系統。所以自然這就牽涉到了 「博X來訂購系統」 與 「統X資訊EC系統」兩者系統之間的整合,這是合理的。只是,以目前 統X資訊 是尋求從 Web 端網頁之間的互通來達成擴展服務的目的,技術上是可行沒錯,但就是給我一種 “說不出的古怪” 的感覺。思考系統整合的意義:「 系統整合,講究的是以服務為導向 (service-oriented),透過標準界面 (interface)讓系統彼此之間互通,以達成能擴展更多樣化、效率、彈性的服務為目的。」 統X資訊 是服務的提供者 (service provider)沒有錯,但是,它是提供 “透過各種查詢的方式來取得 7-11 門市 的資訊”,卻沒有必要連 Web UI 使用者介面都要干涉參與。這感覺好像是本來是在 博X來 填寫結帳程序表單時,給 “綁架” 到了 統X EC系統,逼著點選門市資訊後,再給你送回原來的表單畫面,相當的不協調。 UI 最好是由提供主要服務的系統來統籌管理比較理想。在此例明顯就是由 博X來 的訂購系統來負責;而使用者在填寫表單與取得相關服務的過程中,不需要也不會知道這些服務是由哪些系統提供的,使用者只要知道現在幫他統籌服務的那一個系統 (訂購系統)能協助完成他的目的即可,而未來服務的提供者在後端換掉,也不會去影響到前端的 UI 畫面,這是系統整合設計的基本思維。 我是這麼以為,系統整合重視的不是在 UI 層的整合,而是回到源本,系統服務是由擔負企業邏輯 (business logic) 的中間 (Middleware) 層來負責的,自然,整合的焦點應該就是位於系統的中間層,這會比較合理,也會來得有彈性得多。 透過本案例,我想也可以分享一下,所謂的中間層是大概如何的作法,未來又可以有什麼樣的擴展彈性。
參考圖1,這是利用 使用案例圖 (use case diagram)來表達功能需求的觀點。使用者的主要目的是 “訂購書籍”,訂購的程序必然會 “包含 (include)” 《結帳》 的程序。而在《結帳》這個程序中,只有當你選擇 “至門市取貨” 時,才會使用《選擇 7-11 門市》這個子功能,所以在圖上的表達是利用 “extend” 這個 stereotype 來表達《結帳》與《選擇 7-11 門市》案例之間的關係。 當使用者要選擇門市時,門市的資訊是由 統X EC 系統來負責,在圖上是利用表達外部系統的參與者 (actor)來表示。
圖 1、博X來訂購系統《選擇7-11 門市》使用案例圖