20250413-作?
題目
特定領域軟件架構DSSA(Domain Specific Software Architecture)就是在一個特定應用領域中為一組應用提供組織結構參考的標準軟件體系結構。對DSSA 研究的角度、關心的問題不同導致了對DSSA 的不同定義。DSSA 的必備特征如下。
? ? 一個嚴格定義的問題域和問題解域。
? ? 具有普遍性,使其可以用于領域中某個特定應用的開發。
? ? 對整個領域的構件組織模型的恰當抽象。
? ? 具備該領域固定的、典型的在開發過程中可重用元素。
請圍繞“特定領域軟件架構”論題,依次從以下三個方面進行論述。
1 概要敘述你所參與管理或開發的軟件項目,以及你在其中所承擔的主要工作。
2 說明DSSA 包括哪幾個階段的活動以及參與人員有哪些。
3 結合②詳細說明你所參與的特定領域軟件開發項目是如何進行架構設計的,給出每個階段具體的實踐過程。
?摘要
? ? 某省預約掛號系統簡稱預約掛號系統,是我司自主研發的醫療產品,該系統集眾多功能于一體,旨為提高醫療服務質量和患者體驗,隨著用戶量的逐年攀升,系統面臨著性能和可用性的挑戰,嚴重阻礙了服務質量的進一步提升。我司決定于2023年3月對預約掛號系統進行全面升級工作,計劃一年,投資800萬,我擔任系統架構設計師,主要工作就是系統架構的整體設計。因系統涉及領域較多,我們采用了DSSA的架構設計方法,通過定義領域范圍、定義領域特定元素、定義領域特定設計和實現需求約束、定義領域模型和體系結構、產生搜集可重用的產品單元等5個階段,完成了預約掛號系統升級工作,輕松應對了系統高并發時期要求的性能和可用性,得到了高層領導和組員的高度認可。
背景
? ? 隨著信息化時代的到來,各大醫院紛紛擁抱線上系統,我司順應時代潮流開發了一款集預約掛號、體檢預約、報告查詢和名醫搶號等功能于一體的預約掛號系統,旨為提高醫療服務質量和患者體驗,但隨著用戶量的逐年攀升,系統面臨著性能瓶頸和可用性的嚴峻挑戰,嚴重制約了服務質量的進一步提升,為了讓預約掛號系統持續穩定的提供服務,我司毅然決定2023年3月對預約掛號系統進行全面升級工作,計劃一年時間,投資800萬,我擔任系統架構設計師,主要工作涵蓋了系統架構的整體設計、技術棧的精準選型和各個階段的評審工作。考慮到預約掛號系統涉及業務領域眾多,我們采用了DSSA的架構設計方法來指導系統的升級工作,我們經過定義領域范圍、定義領域特定元素、定義領域特定設計和實現需求約束、定義領域模型和體系結構、產生搜集可重用的產品單元等5個階段的循環迭代,成功對預約掛號系統的每個業務領域進行了設計和實施,完成了系統的全面升級工作。
理論
? ? DSSA總共包括了3個活動,每個活動中都有不同領域的人員參與,且對參與的領域人員的領域經驗要求極高,下面介紹3個活動。
? ? 1.領域分析階段。該階段主要是對系統的業務領域進行分析,目標是產生領域模型,參與人員有領域專家和領域分析師。找出系統中的用戶需求、企業需求、可行性研究和業務目標等等領域的所有需求。然后整理這些需求,找出領域需求的共通點。再然后對需求分析,產生各個領域的模型,整理成需求規格說明書,指導后續的工作,同時也提供參考依據。
? ? 2.領域設計階段。該階段主要是對提出的問題領域找出領域的解決方案,目標是生成領域架構,參與人員有領域架構設計師。領域專家和領域分析師可能需要參與指導。首先查看分析階段提出的問題,整理歸類。然后再提出解決方案,組織評審排除風險,生成領域的體系結構模型,另外,由于領域需求有變化性,所以產生的領域體系結構也要有變化性。整理成設計文檔,為實現階段提供參考和依據。
? ? 3.領域實現階段。該階段主要是對領域的體系結構進行編碼、測試和運行維護階段,參與人員有領域實現人員。參考領域設計階段產生的體系結構模型、設計模型和需求約束文檔等材料。
實踐
? ? 預約掛號系統運行多年,已經產生了機構領域、消費者領域、統計領域和支付領域等眾多的業務領域,所以我們采用了DSSA的設計方法,獲得特定領域體系結構的階段有五個,接下來我通過對機構領域的設計為例,描述這幾個階段。
? ? 1.定義領域范圍。首先由領域分析師分析,機構領域涉及的范圍有醫院、科室、醫生等模塊。a)醫院承載科室和醫生,醫生與科室之間是多對多關系但是都屬于一個醫院。b)科室主要用來區分疾病。c)醫生與發放號源、掛號和就診等功能緊密結合。老系統中的醫院、科室和醫生的功能都比較有局限性,都是對接三方醫院管理系統,此次升級涉及了模式的改造,改為由醫院直接使用預約掛號系統錄入醫院、科室和醫生的信息,所以需要具有代表性醫院的領域專家參與設計。
? ? 2.定義領域特定元素。在領域專家的參與和指導下,我們對機構領域有了新的認識,了解到:a)醫生元素,醫生坐診分為普通號、專家號,號源與醫生不強綁定關系,普通號可以是所有醫生,專家號只對應一個醫生。b)醫院元素,首次從領域專家處聽到了機構名詞,眾多醫院可以使用機構代表,這也影響了我們后續對醫院服務的稱呼,我們改為了機構服務。c)科室元素,對疾病的分類,與醫生之間是多對多的關系。領域分析人員與領域專家一起定義了機構領域詞典,為后續的設計工作奠定了基礎。
? ? 3.定義領域特定設計和實現需求約束。我對機構領域中相關的信息有了初步的認識。首先,從領域分析人員處得到了需求規格說明書,以及分析的模型,我根據分析模型,設計了有醫院、科室和醫生等實體組成的領域類圖。其次,結合老系統目前的運行狀態材料,設計領域架構時我發現目前預約掛號系統,在檢索醫院、科室和醫生的時候,有檢索速度慢、無法查詢附近的醫院等問題,我提出了使用流行的NoSQL數據來代替關系型數據的存儲以提高性能,但這會造成項目接入多個數據庫,對數據的一致性和安全性有不小的影響。然后,我組織了討論會,邀請了領域相關的專家、分析和設計人員參與了會議,決定使用ES(Elastic Search)中間件來存儲機構相關的詳細信息,在信息存儲上服務直接與ES進行交互,采用異步增量的方式同步到關系型數據中作為后續大數據分析的離線數據,允許離線數據有一段時間的不一致。
? ? 4.定義領域模型和體系結構。a)該階段我細化了機構領域類圖,并將類圖打包成了包圖來表示機構領域的體系結構。b)又通過活動圖、順序圖描述了醫生等實體的行為,c)通過通信圖描述了醫院、科室和醫生等實例之間的交互關系。d)設計了部署圖,來描述系統各個服務如何部署和部署的參數等等。
? ? 5.產生搜集領域中可重用的產品元素。為了提高開發的效率,我又在老系統中通過系統復用整理了可重用的功能模塊。首先,我把系統中所需要數據庫構件、構件和代碼等都描述進了復用文檔中。其次,對于構件庫中ES、Nacos等這些中間件,從安全性方面考量,檢查漏洞和版本。然后,將有缺陷的組件更新成最穩定的版本。
通過設計階段整理的文檔,領域開發人員通過面相服務的開發方法,使用Spring、mybatis等工具開發了預約掛號系統的各個組件,通過單元、集成、系統和驗收測試,完成了系統的開發。
結尾
得益于DSSA的使用,我們在2024年3月份順利完成了預約掛號系統的開發并上線,又經過了一個月的精心推廣,又吸引了大批的用戶,目前用戶量已經突破千萬,又對接了11個地市的500多家醫院,在支持名醫搶號時表現突出,輕松應對萬級的用戶請求,極大的提高了系統性能和可用性,得到了項目組成員的贊譽和高層領導的高度認可。但在項目開發初期,有部分組員對DSSA的開發方法理解有誤,一度阻礙了項目進度的按時推進,針對此問題我們快速反應,經過了項目組間人員的靈活調配,完美解決了這一短板,也給了我深刻的教訓。下一步,我們準備對預約掛號系統的數據進行遷移工作,經過了此次項目的成功實施,我們對數據遷移工作充滿信息,并將以更高的要求和標準對待遷移任務。此次DSSA方法的實施是個不可多得的機會,通過這次經歷,我的知識和經驗都得到了顯著的提高。
總結經驗:
1.分段可以,但不能處處分段。
2.分小標題可以,但不能處處小標題。要說明你有幾步,否則使用:首先-其次-然后。
3.實踐部分,要盡可能的拿 功能 舉例子。