主頁 > 軟體設計 > 流程引擎的架構設計

流程引擎的架構設計

2022-10-14 10:27:40 軟體設計

1 什么是流程引擎

流程引擎是一個底層支撐平臺,是為提供流程處理而開發設計的,流程引擎和流程應用,以及應用程式的關系如下圖所示,

常見的支撐場景有:Workflow、BPM、流程編排等,本次分享,主要從BPM流程引擎切入,介紹流程引擎的架構設計方法,

1.1 什么是流程

簡單來說,流程就是一系列活動的組合,比如,用于企業辦公的OA系統中,就存在大量的申請審批類的流程,在生產制造業,有大量的從銷售端的訂單,到生產制造,再到簽識訓款的生產銷售流程,在機器學習領域,有亞馬遜AWS Sagemaker的大資料處理、機器學習的應用,綜上,流程是一個概念,在和具體實作結合時,就產生了不同的流程產品,如DevOps、Spring Data Stream等,
在流程實作方面,主要可以分為2種實作方式,一種是用代碼實作,比如:用代碼實作一個加班申請,那么就要自己對接SSO進行單點登錄,通過介面拿到發起人和審批人的資訊,同時保存表單資料,另一種方式是使用流程引擎來實作,流程引擎對接應用場景所需資料,如加班申請,流程引擎對接SSO、OU、審批人配置、權限等,實作這樣一個流程,只需要關心流程配置、流程節點和流程表單即可,流程流轉以及流程的資料處理,都通過流程引擎來完成,
流程引擎可以快速落地流程實作,這也是流程引擎存在的價值,

1.2 什么是引擎

一般而言,引擎是一個程式或一套系統的支持部分,常見的程式引擎有游戲引擎、搜索引擎、殺毒引擎等,引擎是脫離具體業務場景的某一類業務場景的高度抽象和封裝,
比如,某OA公司,封裝了一套審批用的workflow,實施人員只需要配置流程和表單即可交付專案,再比如,美國某公司做了一個AI引擎做NBA(Next Best Action)推薦,封裝了推薦領域的常用演算法,在不同的場景自動選擇和組合多種演算法,進行智能推薦,

1.3 流程設計器

流程設計器是流程和引擎的連接方,用戶通過流程設計器,將某種layout和rule固化成某種流程,然后通過資料和資料背景關系,使用流程引擎自動按照某種固化的流程進行執行,
我將目前見到的流程設計器的理論基礎,分為以下三類:1,自定義系;2,UML中的活動圖系;3,BPMN系,

1.3.1 自定義系

用于Sagemaker等場景的AWS Step Function(自定義流程節點)

1.3.2 UML Activity Diagram

Flowportal BPM的流程設計器

1.3.3 BPMN系

activiti的流程設計器

炎黃盈動的流程設計器

題外話:炎黃盈動的流程設計器,和processon中的流程設計器界面幾乎一樣,因為本質上是一家的,

2 流程引擎的應用

2.1 Workflow

作業流管理聯盟(Workflow Management Coalition,WfMC)作為作業流管理的標準化組織而成立,
WfMC對作業流給出定義為:作業流是指一類能夠完全自動執行的經營程序,根據一系列程序規則,將檔案、資訊或任務在不同的執行者之間進行傳遞與執行,

在workflow中,流程引擎主要用于支撐流程審批和資料流轉,應用場景非常廣泛,
國外產品(開源或商用)通常需求和操作比較簡單,不會有國內的需求那么復雜,國內的產品,經歷了眾多客戶的錘煉,功能目前都比較強大,
一般而言,workflow使用場景最多的是OA產品,在OA辦公中,包含了企業辦公中的大量元素,這些元素足夠形成特定的產品,比如門戶系統、移動辦公,在OA的專案落地程序中,結合行業、業務側重點又可以形成行業解決方案和專題方案,
以下是某OA公司產品和解決方案,

2.2 BPM(Business Process Management)

Workflow主要是解決審批和資料流轉,而BPM主要是解決端到端、資訊孤島等問題而存在的,大多數用BPM產品的客戶,都是在BPM基礎上進行系統搭建,比如在BPM上面搭建OA、CRM、HR等系統,
BPM的使用場景,比Workflow更廣泛,BPM產品中包含大量的和第三方系統互動的組件和自定義SQL、代碼組件,比如,BPM系統中的檔案觸發器,可以在海關等互動場景下,通過監控FTP服務器中的檔案,自動觸發流程實體;可以通過定時器Timer,自動每日執行資料同步,并通過Mail節點將同步結果通知到相關運營成員等,

BPM的應用,可以按照執行前、執行中和執行后來劃分,

2.3 流程編排

流程編排是脫離流程業務領域的更高一層抽象,使用方可以通過流程編排系統,結合自己的業務場景進行業務定制,比如,可以將相關業務代碼,封裝成function,然后通過云廠商平臺的FAAS平臺,將不同業務的function進行關聯和調度,從而完成某項任務,

3 流程引擎的架構設計

鑒于一些朋友可能沒有使用和接觸過流程引擎,先介紹流程引擎的組成單元,再介紹基于某個BPM產品的專案是如何進行開發的,我們通過BPM專案開發,對流程引擎的作用有個初步的認識,

3.1 BPM流程引擎的組成單元

  1. 組織、角色、用戶、成員的組織架構托管;
  2. 流程資源檔案的配置、校驗、存盤和執行,對不同的流程節點,流程引擎自動結合配置、資料處理其對應的業務邏輯,流程資料自動處理;
  3. 表單配置、資料系結,表單資料的根據流程配置自動處理;
  4. 通用的資料介面;

3.1.1 組織架構的設計

3.1.2 流程設計器

流程設計器包含左側的分組節點串列,和右側的畫布,左側的節點可以如下進行設計,

問題:對于一個XML或JSON格式的流程圖,如何進行決議?
不同的節點,按照不同的業務場景,配置不同的配置項,比如,對于Human Node需要配置審批人,配置審批環節的展示表單,審批環節能夠修改哪些欄位,哪些欄位的修改要進行留痕等,

3.1.3 表單設計器

這種是按照表單相關資料表,生成出一個表單,然后對表單欄位進行配置和資料系結,

這種是Drag&Drop控制元件,然后配置控制元件的屬性,如系結欄位等,

這種是Drag&Drop控制元件,無需關聯資料庫表欄位的表單

資料表生成表單的概要流程如下圖所示,

拖拽控制元件系結資料表欄位的概要流程如下,

拖拽控制元件無需系結資料表欄位的概要流程,使用NoSQL的Document記錄或使用RDS提供的JSON型別進行保存會比較方便,

3.1.4 介面設計

結合Activity的介面設計,如下圖所示

一些系統在創建一個流程任務的時候,要先按照流程模板先創建一個應用示例,再關聯發起人和備注,呼叫RuntimeService,執行到StartNode,這類設計因人而異,這么做略顯繁瑣,

3.2 基于流程引擎的專案開發實踐

3.2.1 流程專案實踐流程

  1. 確定組織架構
  2. 確定流程,包括流程布局、審批人設定、權限
  3. 確定表單資訊(欄位、型別、資料源、校驗規則)和表單樣式
  4. 確定頁面布局、樣式、資料欄位、搜索、匯入、匯出
  5. 報表

3.2.2 組織架構

組織架構實作,有兩種方法,一種是按照維度進行資料管理,另一種是在同一棵組織架構樹下進行管理,
按照集團、公司、部門、用戶等不同維度,進行資料管理,比較常見,這里不做討論,下圖為按維度維護資料的示例,

按照同一棵組織架構樹進行資料維護,界面一般顯示為左樹右表,大多數商業化產品,都會將此組織架構樹進行記憶體快取,以方便審批人查找、開窗選擇OrgUnit、Role、User、Member等場景,Member的引入是為了解決一人多職等場景,一般發起流程的時候,需要帶出發起人擁有的Member串列,從而后續節點取合適的審批人,

對于組織架構而言,需要考慮,系統本身要具備OU存盤的能力,對于沒有組織架構的用戶,可以直接在系統的組織架構中新建組織架構,同時,對于已有系統的客戶,可以通過組織架構資料同步來進行資料自動維護,對于用AD域內部管控的客戶來說,需要具備AD域身份認證的能力,對于復雜場景,比如用戶是SaaS化等復雜場景,組織架構也需要在系統內部,支持使用API的方式來獲取組織資訊,
所以在組織架構設計的時候,要使用插件的方式來做,具體使用哪種插件,可以在組態檔中進行配置,以下為一個商業產品的組織架構操作界面示例,

常見的組織架構操作還有組織架構同步,比如流程系統同步微信企業號、釘釘等,這里不再展開,

3.2.3 流程設計

我們想象的流程,可能是向下面的這種簡單流程,

而實際專案,碰到的流程,一般是如下圖所示的情景,

初步看幾個流程的模型檔案是什么樣的,先有個印象,

<?xml version="1.0" encoding="UTF-8" ?>
<definitions id="definitions"
targetNamespace="http://activiti.org/bpmn20"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:activiti="http://activiti.org/bpmn">

<process id="vacationRequest" name="Vacation request">
<startEvent id="request" activiti:initiator="employeeName">
<extensionElements>
<activiti:formProperty id="numberOfDays" name="Number of days" type="long" value="https://www.cnblogs.com/Jcloud/p/1" required="true"/>
<activiti:formProperty id="startDate" name="First day of holiday (dd-MM-yyy)" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" />
<activiti:formProperty id="vacationMotivation" name="Motivation" type="string" />
</extensionElements>
</startEvent>
<sequenceFlow id="flow1" sourceRef="request" targetRef="handleRequest" />
<userTask id="handleRequest" name="Handle vacation request" >
<documentation>
${employeeName} would like to take ${numberOfDays} day(s) of vacation (Motivation: ${vacationMotivation}).
</documentation>
<extensionElements>
<activiti:formProperty id="vacationApproved" name="Do you approve this vacation" type="enum" required="true">
<activiti:value id="true" name="Approve" />
<activiti:value id="false" name="Reject" />
</activiti:formProperty>
<activiti:formProperty id="managerMotivation" name="Motivation" type="string" />
</extensionElements>
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>management</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<sequenceFlow id="flow2" sourceRef="handleRequest" targetRef="requestApprovedDecision" />
<exclusiveGateway id="requestApprovedDecision" name="Request approved?" />
<sequenceFlow id="flow3" sourceRef="requestApprovedDecision" targetRef="sendApprovalMail">
<conditionExpression xsi:type="tFormalExpression">${vacationApproved == 'true'}</conditionExpression>
</sequenceFlow>
<task id="sendApprovalMail" name="Send confirmation e-mail" />
<sequenceFlow id="flow4" sourceRef="sendApprovalMail" targetRef="theEnd1" />
<endEvent id="theEnd1" />
<sequenceFlow id="flow5" sourceRef="requestApprovedDecision" targetRef="adjustVacationRequestTask">
<conditionExpression xsi:type="tFormalExpression">${vacationApproved == 'false'}</conditionExpression>
</sequenceFlow>
<userTask id="adjustVacationRequestTask" name="Adjust vacation request">
<documentation>
Your manager has disapproved your vacation request for ${numberOfDays} days.
Reason: ${managerMotivation}
</documentation>
<extensionElements>
<activiti:formProperty id="numberOfDays" name="Number of days" value="https://www.cnblogs.com/Jcloud/p/${numberOfDays}" type="long" required="true"/>
<activiti:formProperty id="startDate" name="First day of holiday (dd-MM-yyy)" value="https://www.cnblogs.com/Jcloud/p/${startDate}" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" />
<activiti:formProperty id="vacationMotivation" name="Motivation" value="https://www.cnblogs.com/Jcloud/p/${vacationMotivation}" type="string" />
<activiti:formProperty id="resendRequest" name="Resend vacation request to manager?" type="enum" required="true">
<activiti:value id="true" name="Yes" />
<activiti:value id="false" name="No" />
</activiti:formProperty>
</extensionElements>
<humanPerformer>
<resourceAssignmentExpression>
<formalExpression>${employeeName}</formalExpression>
</resourceAssignmentExpression>
</humanPerformer>
</userTask>
<sequenceFlow id="flow6" sourceRef="adjustVacationRequestTask" targetRef="resendRequestDecision" />
<exclusiveGateway id="resendRequestDecision" name="Resend request?" />
<sequenceFlow id="flow7" sourceRef="resendRequestDecision" targetRef="handleRequest">
<conditionExpression xsi:type="tFormalExpression">${resendRequest == 'true'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow8" sourceRef="resendRequestDecision" targetRef="theEnd2">
<conditionExpression xsi:type="tFormalExpression">${resendRequest == 'false'}</conditionExpression>
</sequenceFlow>
<endEvent id="theEnd2" />
</process>
</definitions>

一個螢屏截圖都截不完的流程,如果用代碼去實作整個流程,其作業量和效率,可想而知,而實際做專案,使用基于流程引擎的產品來做專案的時候,只需要確定節點、節點配置、資料配置和權限即可,
問題:一般流程,都帶有郵件通知的節點,如何實作郵件通知節點?請考慮以下情景,
流程流轉和執行的時候,會遇到各種情況的錯誤,比如找不到審批人等,此時流程引擎要對資料做rollback,而郵件通知節點的業務邏輯已經執行過了,

權限方面,對于流程資源,哪些部門可以申請,哪些角色不可申請,都應該做流程控制,而在流程執行程序中,流程資料、不是路程的相關人也都不應該看到流程,處理過流程的審批人,不可以再對流程進行處理等,都是權限方面要考慮的問題,

3.2.4 表單設計

如下圖所示的表單,可以分析以下,一個流程表單有多個主表資訊和多個子表資訊,一般而言,如果是通過流程引擎做非流程的資料處理,子表通過主表ID來做關聯,如果通過流程引擎做流程的資料處理,子表和主表通過TaskId來做關聯,以下為示例,

流程系統需要表單設計器,一個流程的不同節點可以掛接不同的表單,以方便不同角色的人關注不同維度的流程資訊

3.2.5 頁面設計

一般而言,對于流程的發起、審批、歷史記錄等,都是通用的系統界面,而一些業務場景,需要單獨做串列界面,以方便使用,對于已有門戶系統的客戶,需要融合其界面樣式,以下為曾經做過的專案示例,

3.2.6 報表

由于不是所有客戶都有報表系統,所以流程系統需要具備一個基本的報表功能,下圖為示例,

有報表系統的客戶,可以使用其商業版報表系統,獲取(直接取、數倉)資料進行展示,常見的報表系統有FineReport、Tableau、PowerBI等,

3.3 BPM流程引擎架構設計

3.3.1 流程引擎的架構設計

3.3.2 發起流程

流程引擎處理程序

執行節點處理程序

問題:在流程引擎處理程序中,如果一個節點有多條連線,如何尋找FromNodeId是某個Node的連線?
人工處理時,指定連線text

3.4 流程引擎架構設計

3.4.1 業務識別

  1. 識別業務場景中的配置項,使用集合或分組的方式,讓業務可配置
  2. 支撐業務流程程序的可配置化
  3. 支撐業務場景中的資料,自動處理

3.4.2 流程引擎的實作

  1. 資源相關服務,資源加載,資源保存,資源加密等
  2. 配置項相關服務
  3. PVM虛擬機的實作,即通過某個節點(發起時為開始節點)作為初始節點,按照某個連線的action進行節點的自動執行的虛擬機
  4. 資料配置、資料權限
  5. 流程資料和業務資料的自動處理

4 商業機會

  1. Business Process Analysis (BPA) 流程分析,幫助企業進行流程調整和優化

  2. Process Assets Library(PAL)流程資產庫,對企業流程進行知識化沉淀,將制度和流程落地做系結,讓審批人知曉流程中對應的職責

  3. Process Simulate 流程模擬,自動化測驗

  4. Process Forecast 流程預測

  5. 低代碼平臺

  6. 更廣泛的機會,在于業務領域+流程引擎,比如:DevOps、RPA、應用與服務編排、資料編排、FaaS編排等,

作者:馬瑞

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/514199.html

標籤:架構設計

上一篇:軟體設計第一課

下一篇:設計模式之策略模式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more