企業(yè)商務模型:
????????企業(yè)商務模型的內(nèi)容主要包括主營業(yè)務、商務模式、商務主體、競品分析、組織架構、商務運作模型和業(yè)務流程等。1)主營業(yè)務即公司做什么業(yè)務?2)商業(yè)模式即公司怎么賺錢?3)商務主體即哪幾個人在一起做這門生意?4)競品分析即了解競爭對手的情況?組織架構即公司部門是怎么劃分的,組織架構圖中標出人數(shù),根據(jù)系統(tǒng)與業(yè)務之間對應關系,可以了解系統(tǒng)中哪些模塊使用頻率高,以及業(yè)務與其對應模塊的復雜度?5)商務運作模型即公司是如何運作的,售前做計劃,找供應商把東西買進來后,經(jīng)過服務和結(jié)算,再賣給我們的經(jīng)銷商和采購商,使我們獲得利潤,售后進行大數(shù)據(jù)分析最后又指導著我們的售前,整個過程形成良性循環(huán)??梢园岩患夜鞠胂蟪梢慌_機器,輸進去的是錢,轉(zhuǎn)一轉(zhuǎn)后,又能夠生出更多的錢出來。6)最后是業(yè)務流程和附檔資料,業(yè)務流程包括預訂流程、訂單處理流程、產(chǎn)品供應流程、財務結(jié)算流程、賬戶管理流程。企業(yè)商務模型的建立,指導著整個應用系統(tǒng)模型的建立,它是整個應用系統(tǒng)建設的基礎和前提,畢竟應用系統(tǒng)是為業(yè)務服務的。
架構設計:
????????架構現(xiàn)狀的內(nèi)容主要包括:功能架構、應用架構、數(shù)據(jù)設計和物理架構。功能架構主要包括功能、角色和權限三部分。
????????功能是企業(yè)服務,用戶使用的每一個功能,就是企業(yè)的每一個服務。角色是用戶操作的歸類,功能與角色的對應關系即權限。了解系統(tǒng)架構的現(xiàn)狀,從功能架構開始。
????????應用就是處理器,應用架構的內(nèi)容包括現(xiàn)有架構圖、Web 應用現(xiàn)狀、作業(yè)小應用(Job)現(xiàn)狀和接口架構。其中,接口是應用層面的關鍵,它是一個程序與另外一個程序交互的部分。應用架構圖表列出了哪些業(yè)務邏輯沒有被重用,換句話說業(yè)務邏輯被多少個應用調(diào)用,就需要被重復開發(fā)多少次,一旦改了一個地方,就要同時改多個地方,導致系統(tǒng)開發(fā)效率非常低下。各業(yè)務邏輯如預訂邏輯,雖然被多個應用調(diào)用,但它們與應用是沒有關系的,業(yè)務邏輯可以獨立的存在,也可以寄宿于多個應用。業(yè)務邏輯是一個業(yè)務操作的抽象,而業(yè)務應用與業(yè)務部門共同完成了業(yè)務操作。
? ??????數(shù)據(jù)設計依賴于企業(yè)的數(shù)據(jù),而不是數(shù)據(jù)庫的設計,對企業(yè)數(shù)據(jù)適當做歸類,會直接導致數(shù)據(jù)設計,最終畫出 E-R 圖,數(shù)據(jù)設計完成后,數(shù)據(jù)庫設計就自然而然出來了。超越庫、超越表去看這張 E-R 圖,可以看出它包括產(chǎn)品、訂單、結(jié)算、用戶和基礎設施這五類數(shù)據(jù)。低層的 E-R 圖可以變,但是高層的 E-R圖一般不會變化,因為它是根據(jù)你的業(yè)務模型而定,業(yè)務模型穩(wěn)定,高層E-R 圖也是穩(wěn)定的。數(shù)據(jù)庫只要早期設計得好,是可以做到易伸縮、易拆分的。在業(yè)務發(fā)展的早期它可以是一個庫,里面有 5 個模塊,中期可以分為5 個庫,后期以更低級別可以分為更多的庫,這與業(yè)務階段及系統(tǒng)復雜度相關。在數(shù)據(jù)的設計完成后,數(shù)據(jù)庫的設計也就很容易規(guī)劃和調(diào)整。
? ??????數(shù)據(jù)的流轉(zhuǎn)狀態(tài)即狀態(tài)圖。通過數(shù)據(jù)狀態(tài)圖去了解現(xiàn)有數(shù)據(jù)流轉(zhuǎn)變遷,如國內(nèi)訂單狀態(tài)變遷圖,這種圖的價值不僅在于數(shù)據(jù)庫層,還在于服務化。
? ??????物理架構的內(nèi)容主要包括 IDC 機房、機房之間訪問關系、機房內(nèi)服務器物理部署圖、機房與業(yè)務分布、網(wǎng)站架構、數(shù)據(jù)庫架構、集群清單和域名清單。將這些內(nèi)容以列表和圖形方式整理出來,就會很容易了解和發(fā)現(xiàn)問題,只有發(fā)現(xiàn)問題才能解決問題,特別是在全局體系架構方面,這也是表和圖的價值所在。物理架構的不合理,應用架構是很難合理的,因為物理架構是我們的基礎設施,位于最底層,下層為上層服務,運維要為應用服務,應用要為業(yè)務服務,業(yè)務要為客人服務。
領域模型:
? ??????領域模型關注概念,關注職責、關注邊界、關注交互,只有先確定職責和邊界,交互才會很清晰。領域模型是針對現(xiàn)有問題域提出一個系統(tǒng)解決方案,然后在圖表上建立完整的模型,如同用 AutoCAD 畫的施工圖紙一樣。領域模型屬于概要設計階段,對于單個應用架構設計,首先需要了解業(yè)務和功能需求、用例圖、用例活動圖,然后才是領域模型。業(yè)務流程圖是對業(yè)務操作的抽象,領域圖是對業(yè)務邏輯代碼的抽象。
? ??????建立領域詞匯是建立領域模型的第一步,它能統(tǒng)一詞匯明確概念,以減少一詞多義、一義多詞的情況。概念一旦確定,再擴展屬性和行為,然后把它當作一個單元與其它事物構建在一起,就會很容易形成模型,領域模型與企業(yè)商務模型中的業(yè)務流程圖有參考對應關系。領域模型在實現(xiàn)時可大可小,在業(yè)務的早期,在系統(tǒng)比較小的情況下,它有可能是一個類。當系統(tǒng)做大了以后,它可能是個 DLL 庫。再做更大一點的時候,它可能是一個服務,給不同的應用去調(diào)用。每一個方法都有成為服務的潛質(zhì),特別是在系統(tǒng)中后期。領域模型是業(yè)務邏輯代碼的施工圖紙,它不僅有利于對現(xiàn)在系統(tǒng)業(yè)務邏輯的了解,同時也指導未來的架構改造。
架構規(guī)劃:
? ??????當我們了解了業(yè)務、了解了架構的現(xiàn)狀,發(fā)現(xiàn)現(xiàn)有架構的問題,接下來就可以做中遠期架構規(guī)劃,以及架構的調(diào)整和具體實施。架構規(guī)劃內(nèi)容包括:頂層架構規(guī)劃、網(wǎng)站功能規(guī)劃、應用規(guī)劃、SOA 規(guī)劃、分層架構規(guī)劃、數(shù)據(jù)庫規(guī)劃和物理規(guī)劃等。
? ??????在做網(wǎng)站功能規(guī)劃的時候,更多需要考慮現(xiàn)狀,而不是未來調(diào)整的部分,如果沒有很大問題,則不做調(diào)整,尊重歷史。因為有些東西(如名稱)用戶已經(jīng)使用很久了,調(diào)整往往比較難,合理大于準確。SOA 規(guī)劃就是接口規(guī)劃,它的歸類與商務模型中的業(yè)務流程有參考對應關系。
? ??????先簡單介紹下當前兩種比較流行的分層架構體系,一種是領域架構:倉儲層(Repository Layer)、領域?qū)樱―omain Layer)、應用服務層(Application Layer)、表現(xiàn)層(Presentation Layer)和基礎公共層(Infrastructure Layer),見下圖。

另一種是相對傳統(tǒng)地分為三層:數(shù)據(jù)層(Data Layer)、應用邏輯層(Business Layer)和表現(xiàn)層(Presentation Layer),見下圖。

????????領域架構和三層架構之間有什么區(qū)別?我們是這樣認為的,在早期我們做三層架構的時候,大都以表來做驅(qū)動的,在做領域架構的時候,大都以業(yè)務邏輯來驅(qū)動的,兩者的區(qū)別確實比較明顯。但到了現(xiàn)在,如果都以業(yè)務邏輯為中心的話,實際上兩者并沒有本質(zhì)區(qū)別。當時,我所在公司采用了第二種分層法,我們希望把分層做得極簡,也就是說哪怕剛畢業(yè)進來的員工,在分層時基本上也不會亂。而相對第一種分層法,第二種分層法簡單很多。每一個應用的代碼量都不應該很大,一旦工程變得過大,我們就會把它適當拆分,而不是全部放在一個單塊應用里。總之,我認為分層越簡單,整個軟件結(jié)構就越清晰,代碼就越容易統(tǒng)一。把工程做得極簡,才有利于復制,有利于業(yè)務的快速構建,有利于規(guī)模化、穩(wěn)定可靠。
?????????以上簡單地介紹了總體架構的編寫方法,我們的編寫思路是先了解業(yè)務,建立企業(yè)商務模型,主要包括靜態(tài)的商務主體、組織架構和動態(tài)的商務運作模型和業(yè)務流程。接著了解架構現(xiàn)狀,建立現(xiàn)有信息系統(tǒng)模型,主要包括功能架構、應用架構、數(shù)據(jù)設計和物理架構。一個是商務,一個是電子,兩者即是整個公司的電子商務系統(tǒng)。然后在企業(yè)商務模型和現(xiàn)有系統(tǒng)模型之上建立領域模型,領域模型它相對穩(wěn)定,直接指導著接下來的架構規(guī)劃,最后一定要落地即架構實施。
案例參考:https://github.com/das2017/TopArchDemo