上海網(wǎng)站建設(shè)需要多少錢(qián)(可復(fù)用軟件有哪些)什么是可復(fù)用的組件,
可復(fù)用架構(gòu)是進(jìn)行架構(gòu)設(shè)計(jì)非常重要的思維之一,是面向?qū)ο蠹軜?gòu)設(shè)計(jì)的核心思想復(fù)用可以讓我們站在巨人的肩膀上,基于已有的成果,快速構(gòu)建一個(gè)新系統(tǒng)我們可以通過(guò)中臺(tái)和DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))等方法構(gòu)建企業(yè)級(jí)和業(yè)務(wù)領(lǐng)域的服務(wù),雖然能很好地劃分了中臺(tái)和面向業(yè)務(wù)領(lǐng)域的服務(wù),但是在一些業(yè)務(wù)流程比較復(fù)雜的業(yè)務(wù),我們還是要花費(fèi)大量的成本去組合和編排不同項(xiàng)目的業(yè)務(wù)流程來(lái)實(shí)現(xiàn)最終的業(yè)務(wù)價(jià)值。
那么有沒(méi)有很好的方法來(lái)快速構(gòu)建業(yè)務(wù)流程并實(shí)現(xiàn)業(yè)務(wù)價(jià)值呢?答案是有的本文會(huì)從軟件架構(gòu)的復(fù)用層次、業(yè)務(wù)流程復(fù)用、業(yè)務(wù)流程建模和實(shí)現(xiàn)來(lái)揭曉答案一、可復(fù)用的軟件架構(gòu)的層次我們常說(shuō)代碼復(fù)用,組件復(fù)用,領(lǐng)域模型復(fù)用等,那么可復(fù)用的軟件架構(gòu)有哪些復(fù)用層次呢?。
1.1 技術(shù)復(fù)用首先是代碼級(jí)復(fù)用,其中包括自己或他人的類(lèi)庫(kù),三方的 SDK,其他算法封裝等我們的代碼可以直接調(diào)用它們,也和我們的應(yīng)用打包在一起,運(yùn)行在同一個(gè)進(jìn)程里代碼級(jí)復(fù)用是最低層次的復(fù)用,我們可以把它當(dāng)作你自己源代碼的一部分。
往上就是技術(shù)組件復(fù)用這些組件我們自己可以封裝的,更多的是大量開(kāi)源的中間件,比如 Redis、Rocket MQ、Dubbo 等;組件也包括各種開(kāi)發(fā)框架如 Spring boot這些基礎(chǔ)組件技術(shù)復(fù)雜度很高,它們的存在,極大地簡(jiǎn)化了我們的開(kāi)發(fā)工作。
代碼級(jí)復(fù)用和技術(shù)組件復(fù)用都屬于工具層面,在不同的業(yè)務(wù)下都可以用,但和業(yè)務(wù)場(chǎng)景隔得有點(diǎn)遠(yuǎn),不直接對(duì)應(yīng)業(yè)務(wù)功能,復(fù)用度較高。
1.2 業(yè)務(wù)復(fù)用軟件最終是為業(yè)務(wù)而服務(wù)的,如果能夠直接實(shí)現(xiàn)的業(yè)務(wù)復(fù)用,那項(xiàng)目實(shí)施的效率就越高在一家企業(yè)有不同業(yè)務(wù)能力的復(fù)用,比如微服務(wù)強(qiáng)調(diào)單個(gè)業(yè)務(wù)實(shí)體的封裝和復(fù)用,而中臺(tái)進(jìn)一步實(shí)現(xiàn)了企業(yè)級(jí)業(yè)務(wù)能力的復(fù)用。
所以接下來(lái),我們就從比較簡(jiǎn)單的業(yè)務(wù)實(shí)體復(fù)用開(kāi)始說(shuō)起業(yè)務(wù)實(shí)體在DDD中叫做領(lǐng)域模型,它的復(fù)用針對(duì)細(xì)分的業(yè)務(wù)領(lǐng)域,比如訂單、商品、用戶(hù)等領(lǐng)域它對(duì)各個(gè)業(yè)務(wù)領(lǐng)域的數(shù)據(jù)和業(yè)務(wù)規(guī)則進(jìn)行封裝,將它變成上層應(yīng)用系統(tǒng)可以直接使用的業(yè)務(wù)組件。
業(yè)務(wù)流程的復(fù)用針對(duì)的是業(yè)務(wù)場(chǎng)景,它可以把多個(gè)業(yè)務(wù)實(shí)體和不同業(yè)務(wù)領(lǐng)域服務(wù)、中臺(tái)和基礎(chǔ)平臺(tái)等系統(tǒng)組合和編排起來(lái),完成一個(gè)端到端的業(yè)務(wù)流程比如說(shuō),下單流程需要訪問(wèn)會(huì)員、商品、訂單、庫(kù)存等多個(gè)業(yè)務(wù),如果我們把這些調(diào)用邏輯封裝為一個(gè)下單流程服務(wù),那下單頁(yè)面就可以調(diào)用這個(gè)流程服務(wù)來(lái)完成下單,而不需要去深入了解下單的具體過(guò)程。
相比單個(gè)的業(yè)務(wù)實(shí)體復(fù)用,業(yè)務(wù)流程的復(fù)用程度更高,業(yè)務(wù)價(jià)值也更大最高層次的復(fù)用是對(duì)整個(gè)系統(tǒng)的復(fù)用,比如說(shuō)一個(gè) SaaS 系統(tǒng)(Software-as-a-Service),它在內(nèi)部做了各種通用化設(shè)計(jì),允許我們通過(guò)各種參數(shù)配置,得到我們想要的功能;或者說(shuō)一個(gè) PaaS(Platform-as-a-Service)平臺(tái),它會(huì)提供可編程的插件化支持,允許我們“嵌入”外部代碼,實(shí)現(xiàn)想要的功能。
這種產(chǎn)品級(jí)的復(fù)用,它的復(fù)用程度無(wú)疑是最高的在項(xiàng)目落地的時(shí)候,它無(wú)需核心的開(kāi)發(fā)團(tuán)隊(duì)進(jìn)行開(kāi)發(fā),只由外圍的實(shí)施團(tuán)隊(duì)負(fù)責(zé)就可以了,這樣,一個(gè)項(xiàng)目的上線就能簡(jiǎn)化為一次快速的實(shí)施,不但上線周期短,系統(tǒng)也更穩(wěn)定當(dāng)然,實(shí)現(xiàn)這樣的復(fù)用,難度也是很大的,你既要對(duì)所在行業(yè)的業(yè)務(wù)有很全面的理解,又要有很強(qiáng)的抽象設(shè)計(jì)能力。
這類(lèi)系統(tǒng)中,比較典型的有 Salesforce 的 CRM 系統(tǒng)和 SAP 的 ERP 系統(tǒng)綜上所述,從技術(shù)復(fù)用到業(yè)務(wù)復(fù)用,越往上,由于業(yè)務(wù)多變性,復(fù)用度越低,但復(fù)用產(chǎn)生的價(jià)值也越大,但實(shí)現(xiàn)起來(lái)也越復(fù)雜,它能復(fù)用的場(chǎng)景就越有限。
在實(shí)際工作中,技術(shù)層面上的復(fù)用相對(duì)比較簡(jiǎn)單,我們對(duì)這部分的認(rèn)知也最多,有豐富的中間件可供我們選擇,我們可以逐步構(gòu)建適合自己的技術(shù)體系業(yè)務(wù)上的復(fù)用比純粹的技術(shù)復(fù)用有更高的價(jià)值,我們需要往這個(gè)方向上努力如果我們能進(jìn)一步打造產(chǎn)品級(jí)和業(yè)務(wù)流程中間件,并在這個(gè)基礎(chǔ)上,形成業(yè)務(wù)平臺(tái),這樣,我們就能實(shí)現(xiàn)更高的業(yè)務(wù)級(jí)復(fù)用,可以更高效地支持系統(tǒng)的快速落地。
二、微服務(wù)或中臺(tái)邊界劃分我們通常采用 DDD 的方法來(lái)找到對(duì)應(yīng)的領(lǐng)域模型(業(yè)務(wù)實(shí)體),通過(guò)限界上下文指導(dǎo)微服務(wù)和中臺(tái)的劃分,在這里我們就不在贅述了。
上圖是我們常見(jiàn)的進(jìn)程間架構(gòu),業(yè)務(wù)實(shí)體(領(lǐng)域模型)主要是在中臺(tái)或者領(lǐng)域服務(wù)層我們構(gòu)建產(chǎn)品級(jí)或者業(yè)務(wù)流程級(jí)別往往在前端和BFF或前臺(tái)來(lái)進(jìn)行由于前端的相關(guān)展示等數(shù)據(jù)通常來(lái)自前臺(tái)或BFF,此處我們就討論在前臺(tái)或BFF進(jìn)行產(chǎn)品業(yè)務(wù)流程的設(shè)計(jì)。
三、構(gòu)建價(jià)值交付的高速路此維度主要對(duì)企業(yè)的產(chǎn)品業(yè)務(wù)流程進(jìn)行分層建模,分析企業(yè)如何通過(guò)一系列業(yè)務(wù)活動(dòng),按照相關(guān)的業(yè)務(wù)規(guī)則將輸入轉(zhuǎn)換成為有業(yè)務(wù)價(jià)值的輸出,從而實(shí)現(xiàn)用戶(hù)價(jià)值在我們很多軟件開(kāi)發(fā)項(xiàng)目中,中臺(tái)和微服務(wù)劃分并建設(shè)后,往往中臺(tái)相對(duì)穩(wěn)定,但是前端和前臺(tái)或BFF的業(yè)務(wù)變化頻率要高于中臺(tái),所以我們需要大量的成本進(jìn)行產(chǎn)品業(yè)務(wù)流程的設(shè)計(jì)和實(shí)現(xiàn)。
此處我們以電商場(chǎng)景為例,來(lái)看看如何做好產(chǎn)品流程復(fù)用并構(gòu)建價(jià)值交付的高速路在電商場(chǎng)景中,購(gòu)買(mǎi)不同品類(lèi)的商品,業(yè)務(wù)流程也會(huì)有非常大的差異例如:買(mǎi)賣(mài)實(shí)物商品的流程一般是:買(mǎi)家付款、賣(mài)家發(fā)貨、買(mǎi)家確認(rèn)收貨;買(mǎi)賣(mài)酒店房間的流程一般是:買(mǎi)家付款、賣(mài)家預(yù)留客房、買(mǎi)家入駐、買(mǎi)家退房結(jié)單;買(mǎi)賣(mài)旅游線路的流程一般是:買(mǎi)家付款、賣(mài)家確認(rèn)、服務(wù)履約。
這些業(yè)務(wù)場(chǎng)景、交易流程雖然有較大的的差異,但是他們可以共同復(fù)用核心的交易流程。我們可以采用 DDD 中的共享內(nèi)核的模式進(jìn)行流程建模,如下圖活動(dòng)中的主干交易所示。
3.1 如何進(jìn)行流程建模流程建模是負(fù)責(zé)識(shí)別共性業(yè)務(wù),并抽取通用流程, 設(shè)計(jì)可變點(diǎn),作為可復(fù)用性分析的基礎(chǔ)為了提取可復(fù)用的能力,首先需要識(shí)別共性業(yè)務(wù), 然后將同一類(lèi)共性的業(yè)務(wù)抽象提煉出通用流程,并基于通用流程進(jìn)行可變性分析。
我們可以按業(yè)務(wù)架構(gòu)中流程部分的元模型(階段、活動(dòng)、任務(wù)、步驟、業(yè)務(wù)規(guī)則),結(jié)合自上而 下以及自下而上的方式逐層提煉收斂通用模型和可變點(diǎn)階段:即業(yè)務(wù)流程階段,包含一組用戶(hù)的及與用戶(hù)交互的業(yè)務(wù)活動(dòng),用以實(shí)現(xiàn)階段性?xún)r(jià)值交付的目的。
比如:售前、售中和售后等活動(dòng):即業(yè)務(wù)活動(dòng),是某個(gè)業(yè)務(wù)角色辦理的業(yè)務(wù)事項(xiàng),包含一個(gè)或一組任務(wù),有明確的業(yè)務(wù)成果和業(yè)務(wù)輸出比如:商品發(fā)布、活動(dòng)發(fā)布等任務(wù):是完成活動(dòng)的工作程序,是流程的基本組成單元比如:查詢(xún)商品詳情、更新商品庫(kù)存、創(chuàng)建訂單等。
步驟:是完成任務(wù)的具體步驟,是流程的最原子操作比如:校驗(yàn)用戶(hù)狀態(tài)、校驗(yàn)商戶(hù)狀態(tài)、訂單總價(jià)試算等業(yè)務(wù)規(guī)則:是定義或約束業(yè)務(wù)某些方面的陳述,旨在維護(hù)業(yè)務(wù)結(jié)構(gòu)或控制或影響業(yè)務(wù)行為,它描述業(yè)務(wù)過(guò)程與決策過(guò)程比如:if 訂單. 提貨方式=“郵寄” 且 訂單 . 支付狀態(tài) =“已支付”then“創(chuàng)建物流單”。
如下是這個(gè)幾個(gè)流程建元模型的概念關(guān)系圖。
根據(jù)上面所述的方法,我們對(duì)本節(jié)開(kāi)始的電商場(chǎng)景的例子進(jìn)行了建模,結(jié)果如下,僅供參考。
3.3 價(jià)值交付的高速路上面的建模結(jié)果沒(méi)有把業(yè)務(wù)規(guī)則詳細(xì)地體現(xiàn)出來(lái),但通過(guò)上面的階段、活動(dòng)、任務(wù)和步驟的建模,我們就能很快地發(fā)現(xiàn)電商業(yè)務(wù)流程的高速路(主干交易+擴(kuò)展點(diǎn))在這個(gè)場(chǎng)景中,主干交易是圖中藍(lán)色底色標(biāo)志的活動(dòng);有兩個(gè)可擴(kuò)展點(diǎn),一個(gè)是賣(mài)家確認(rèn)和買(mǎi)家確認(rèn)。
針對(duì)于每一個(gè)活動(dòng),我們可以拆分多個(gè)任務(wù),其中任務(wù)可以跨越不同活動(dòng),如庫(kù)存校驗(yàn)就在添加購(gòu)物車(chē)和買(mǎi)家創(chuàng)建訂單的兩個(gè)活動(dòng)中;每一個(gè)任務(wù)可以拆分成多個(gè)步驟,其中步驟可以跨越不同任務(wù),如訂單狀態(tài)更新等3.3 高速路的實(shí)現(xiàn)
上面我們已經(jīng)構(gòu)建出了價(jià)值交付的高速路,現(xiàn)在有一些開(kāi)源框架可以幫助我們構(gòu)建業(yè)務(wù)流程,但是往往沒(méi)有顯式化地構(gòu)建出活動(dòng)、任務(wù)和步驟此時(shí)就需要我們自己可以構(gòu)建出活動(dòng)、任務(wù)和步驟等業(yè)務(wù)組件來(lái)進(jìn)行架構(gòu)設(shè)計(jì),此時(shí)我們看一下在進(jìn)程內(nèi)的架構(gòu)和我們這些流程元模型的對(duì)應(yīng)關(guān)系。
通過(guò)業(yè)務(wù)概念顯式化,我們就能使得我們的代碼實(shí)現(xiàn)與流程模型保持一致,流程模型與產(chǎn)品業(yè)務(wù)流程保持一致了當(dāng)然由于涉及到業(yè)務(wù)流程,團(tuán)隊(duì)可以根據(jù)自己的情況構(gòu)建出流程引擎來(lái)滿(mǎn)足流程調(diào)度和狀態(tài)跟蹤等,此處不做詳細(xì)描述了。
四、總結(jié)本文主考慮到了很多團(tuán)隊(duì)面臨的實(shí)際情況,在中臺(tái)或領(lǐng)域服務(wù)已經(jīng)確定的時(shí)候,如何能通過(guò)產(chǎn)品業(yè)務(wù)流程復(fù)用來(lái)快速進(jìn)行價(jià)值交付的高速路當(dāng)然在從0到1構(gòu)建的過(guò)程中,我們要先考慮業(yè)務(wù)流程的復(fù)用,可以先進(jìn)行流程建模,清晰可復(fù)用的產(chǎn)品業(yè)務(wù)流程,然后再進(jìn)行領(lǐng)域建模,劃分出合理的領(lǐng)域服務(wù)或者中臺(tái)。
在合理的邊界劃分和可復(fù)用產(chǎn)品業(yè)務(wù)流程,我們就能夠快速地通過(guò)業(yè)務(wù)流程構(gòu)建的高速路迅速實(shí)現(xiàn)業(yè)務(wù)價(jià)值