主頁 > 軟體設計 > 二 領域驅動設計-運用領域模型-交流與語言的使用

二 領域驅動設計-運用領域模型-交流與語言的使用

2020-09-10 06:01:03 軟體設計

目錄

  • 運用領域模型-交流與語言的使用
    • UBIQUITOUS LANGUAGE(通用語言)
    • “大聲地”建模
    • 一個團隊,一種語言
    • 檔案和圖
      • 書面設計檔案
      • 完全依賴可執行代碼的情況
    • 解釋性模型(重點來了,記好)

運用領域模型-交流與語言的使用

非原創,感謝《領域驅動設計》這本書

領域模型可成為軟體專案通用語言的核心,該模型是一組得自于專案人員頭腦中的概念,以及反映了領域深層含義的術語和關系,這些術語和相互關系提供了模型語言的語意,雖然語言是為領域量身定制的,但就技術開發而言,其依然足夠精確,正是這條至關重要的紐帶,將模型與開發活動結合在一起,并使模型與代碼緊密系結,這種基于模型的交流并不局限于UML(統一建模語言)圖,為了最有效地使用模型,需要充分利用各種交流手段,基于模型的交流提高了書面檔案的效用,也提高了敏捷程序中再度強調的非正式圖表和交談的效用,它還通過代碼本身及對應的測驗促進了交流,

UBIQUITOUS LANGUAGE(通用語言)

雖然領域專家對軟體開發的技術術語所知有限,但他們能熟練使用自己領域的術語——可能還具有各種不同的風格,另一方面,開發人員可能會用一些描述性的、功能性的術語來理解和討論系統,而這些術語并不具備領域專家的語言所要傳達的意思,或者,開發人員可能會創建一些用于支持設計的抽象,但領域專家無法理解這些抽象,負責處理問題不同部分的開發人員可能會開發出各自不同的設計概念以及描述領域的方式.

由于語言上存在鴻溝,領域專家們只能模糊地描述他們想要的東西,開發人員雖然努力去理解一個自己不熟悉的領域,但也只能形成模糊的認識,雖然少數團隊成員會設法掌握這兩種語言,但他們會變成資訊流的瓶頸,并且他們的翻譯也不準確,(溝通非常重要)

在一個沒有公共語言的專案上,開發人員不得不為領域專家做翻譯,而領域專家需要充當開發人員與其他領域專家之間的翻譯,甚至開發人員之間還需要互相翻譯,這些翻譯使模型概念變得混淆,而這會導致有害的代碼重構,這種間接的溝通掩蓋了分裂的形成——不同的團隊成員使用不同的術語而尚不自知,由于軟體的各個部分不能夠渾然一體,因此這就導致無法開發出可靠的軟體,翻譯作業導致各類促進深入理解模型的知識和想法無法結合到一起,

日常討論所使用的術語與代碼(軟體專案的最重要產品)中使用的術語不一致,甚至同一個人在講話和寫東西時使用的語言也不一致,這導致的后果是,對領域的深刻表述常常稍縱即逝,根本無法記錄到代碼或檔案中,翻譯使得溝通不暢,并削弱了知識消化,

然而任何一方的語言都不能成為公共語言,因為它們無法滿足所有的需求,所有翻譯的開銷,連帶著誤解的風險,成本實在太高了,專案需要一種公共語言,這種語言要比所有語言的最小公分母健壯得多,通過團隊的一致努力,領域模型可以成為這種公共語言的核心,同時將團隊溝通與軟體實作緊密聯系到一起,該語言將存在于團隊作業中的方方面面,

個人理解:上面說法太絕對了,主要是為了突出通用語言的重要性,不必在意,

UBIQUITOUS LANGUAGE(通用語言)的詞匯包括類和主要操作的名稱,語言中的術語,有些用來討論模型中已經明確的規則,還有一些則來自施加于模型上的高級組織原則,最后,團隊常常應用于領域模型的模式名稱也使這種語言更為豐富,

開發人員應該使用基于模型的語言來描述系統中的工件、任務和功能,這個模型應該為開發人員和領域專家提供一種用于相互交流的語言,而且領域專家還應該使用這種語言來討論需求、開發計劃和特性,語言使用得越普遍,理解進行得就越順暢,

至少,我們應該將它作為目標,但最初,模型可能不太好,因此無法很好地履行這些職責,它可能不會像領域的專業術語那樣具有豐富的語意,但我們又不能直接使用那些術語,因為它們有歧義和矛盾,模型可能缺乏開發人員在代碼中所創建的更為微妙和靈活的特性,這要么是因為開發人員認為模型不必具備這些特性,要么是因為編碼風格是程序式的,只能隱含地表達領域概念,

盡管模型和基于模型的語言之間的次序像是回圈論證,但是,能夠產生更有用模型的知識消化程序依賴于團隊投身于基于模型的語言,持續使用UBIQUITOUS LANGUAGE可以暴露模型中存在的缺點,這樣團隊就可以嘗試并替換不恰當的術語或組合,當在語言中發現缺失時,新的詞語將被引入到討論中,這些語言上的更改也會在領域模型中引起相應的更改,并促使團隊更新類圖并重命名代碼中的類和方法,當術語的意義改變時,甚至會導致行為也發生改變,

個人理解:盡管模型難以很快的理解,有可能一個團隊用了很久才達成共識形成一套自己理解的模型,但是對于剛剛加入的人來說就像天書,無疑增加的學習成本,如果模型更新程序中,有些術語發生變更(隨著理解的深入),會導致功能重做,

將模型作為語言的支柱,確保團隊在內部的所有交流中以及代碼中堅持使用這種語言,在畫圖、寫東西,特別是講話時也要使用這種語言,通過嘗試不同的表示方法(它們反映了備選模型)來消除難點,然后重構代碼,重新命名類、方法和模塊,以便與新模型保持一致,解決交談中的術語混淆問題,就像我們對普通詞匯形成一致的理解一樣,要認識到,UBIQUITOUS LANGUAGE的更改就是對模型的更改,領域專家應該抵制不合適或無法充分表達領域理解的術語或結構,開發人員應該密切關注那些將會妨礙設計的有歧義和不一致的地方,有了UBIQUITOUS LANGUAGE,模型就不僅僅是一個設計工件了,它成為開發人員和領域專家共同完成的每項作業中不可或缺的部分,語言以動態形式傳遞知識,使用這種語言進行討論能夠呈現圖和代碼背后的真實含義,

“大聲地”建模

假如將交談從溝通方式中除去的話,那會是巨大的損失,因為人類本身頗具談話的天賦,遺憾的是,當人們交談時,通常并不使用領域模型的語言,

可能開始時你并不認為上述論斷是正確的,而且的確有例外情況,但下次你參加需求或設計討論時,不妨認真聽一下,你將聽到人們用業務術語或者各種業余術語來描述功能,還會聽到人們討論技術工件和具體的功能,當然,你還會聽到來自領域模型的術語;在人們共同使用的那部分業務術語中,那些顯而易見的名詞在編碼時通常被用作物件名稱,因此這些術語經常被人們提及,但你是否也聽到一些使用當前領域模型中的關系和互動來描述的措辭呢?

改善模型的最佳方式之一就是通過對話來研究,試著大聲說出可能的模型變化中的各種結構,這樣不完善的地方很容易被聽出來,

例如:“如果我們向Routing Service提供出發地、目的地和到達時間,就可以查詢貨物的停靠地點,嗯……將它們存到資料庫中,”(含糊且偏重于技術);“出發地、目的地……把它們都輸入到Routing Service中,而后我們得到一個Itinerary,它包含我們所需的全部資訊,”(更具體,但過于啰嗦);“Routing Service查找滿足Route Specification的Itinerary,”(簡潔)

個人理解:簡潔、抽象、完整的表達,就是模型的描述語言,盡量不說白話,類似文言文,如果剛開始使用模型語言不習慣,也要在溝通時候去適應,大膽說出來,一起適應,形成習慣,

討論系統時要結合模型,使用模型元素及其互動來大聲描述場景,并且按照模型允許的方式將各種概念結合到一起,找到更簡單的表達方式來講出你要講的話,然后將這些新的想法應用到圖和代碼中,

一個團隊,一種語言

技術人員通常認為業務專家最好不要接觸領域模型,他們認為:

“領域模型對他們來說太抽象了,”

“他們不理解物件,”

“這樣我們就不得不用他們的術語來收集需求,”

當然,設計中有一些技術組件與領域專家無關,但模型的核心最好讓他們參與,過于抽象?那你怎么知道抽象是否合理?你是否像他們一樣深入理解領域?有時,某些特定需求是從底層用戶那里收集的,他們在描述這些需求時可能會用到一小部分更具體的術語,但領域專家應該能夠更深入地思考他們所從事的領域,如果連經驗豐富的領域專家都不能理解模型,那么模型一定出了什么問題,

最初,當用戶討論系統尚未建模的未來功能時,他們沒有模型可供使用,但當他們開始與開發人員一起仔細討論這些新想法時,探索共享模型的程序就開始了,最初的模型可能很笨拙且不完整,但會逐漸精化,隨著新語言的演進,領域專家必須付出更多努力來適應它,并更新那些仍然很重要的舊檔案,當領域專家使用這種語言互相討論,或者與開發人員進行討論時,很快就會發現模型中哪些地方不符合他們的需要,甚至是錯誤的,另一方面,模型語言的精確性也會促使領域專家(在開發人員的幫助下)發現他們想法中的矛盾和含糊之處,

個人理解:不要擔心業務領域專家聽不懂技術設計的模型語言,大家可以一起來討論,共同探索,業務人員也要主動去適應,一旦理解后,可以提出自己的意見,幫助改進模型,總的來說,使用模型就是好,有困難-克服,

開發人員和領域專家可以通過一步一步地使用模型物件來走查場景,從而對模型進行非正式的測驗,每次討論都是開發人員和專家一起使用模型的機會,在這個程序中,他們可以加深彼此的理解,并對概念進行精化,領域專家可以使用模型語言來撰寫用例,甚至可以直接利用模型來具體說明驗收測驗,

開發人員的確會使用領域專家無法理解的技術術語,開發人員有其所需的大量術語來討論系統技術,幾乎可以肯定的是,用戶也會用開發人員無法理解的、超出應用程式范疇的專用術語,這些都是對語言的擴展,但在這些語言擴展中,同一領域的相同詞匯不應該反映不同的模型,有了UBIQUITOUS LANGUAGE之后,開發人員之間的對話、領域專家之間的討論以及代碼本身所表達的內容都基于同一種語言,都來自于一個共享的領域模型,

檔案和圖

每當我參加討論軟體設計的會議時,如果不在白板或畫板上畫圖,我就很難討論下去,我畫的大部分是UML圖,主要以類圖和物件互動圖為主,

有些人天生是視覺動物,圖可以幫助人們掌握某些型別的資訊,UML圖在傳達物件之間的關系上真是游刃有余,而且也很擅長表現互動,但它們卻無法給出這些物件的概念定義,在會議中,我會一邊畫圖一邊用語言來豐富它們的意義,或者在與其他參與者討論時進行解釋,簡單、非正式的UML圖能夠維系整個討論,繪制一幅包含當前問題最關鍵的3~5個物件的圖,這樣每個人都可以集中注意力,所有人就物件關系會達成一致的認識,更重要的是,他們將使用相同的物件名稱,如此,口頭討論會更加高效,當人們嘗試不同的想法時,圖也隨之改變,草圖在某種程度上可以反映討論的變化,這是討論中真正重要的部分,畢竟,UML就是統一建模語言,

當人們必須通過UML圖表示整個模型或設計時,麻煩也隨之而來,很多物件模型圖在某些方面過于細致,同時在某些方面又有很多遺漏,說它們過于細致是因為人們認為必須將所有要編碼的物件都放到建模工具中,而細節過多的結果是“只見樹木,不見森林”,

個人理解:我認為uml也可以說是模型的一種表達形式,隨便在白板上劃也是一種模型,只不過不那么規范,比較隨意

UML也不是一種十分令人滿意的編程語言,我從未見過有人使用建模工具的代碼生成功能達到了預期目的,如果UML的能力無法滿足需要,通常人們就不得不忽略模型最關鍵的部分,因為有些規則并不適合用線框圖來表示,當然,代碼生成器也無法使用上面所說的那些文本注釋,如果確實能使用UML這樣的繪圖語言來撰寫可執行程式,那么UML圖就會退化為程式本身的另一種視圖,這樣,“模型”的真正含義就丟失了,如果使用UML作為實作語言,則仍然需要利用其他手段來表達模型的確切含義,

圖是一種溝通和解釋手段,它們可以促進頭腦風暴,簡潔的小圖能夠很好地實作這些目標,而涵蓋整個物件模型的綜合性大圖反而失去了溝通或解釋能力,因為它們將讀者淹沒在大量細節之中,加之這些圖也缺乏目的性,鑒于此,我們應避免使用包羅萬象的物件模型圖,甚至不能使用包含所有細節的UML資料存盤庫,相反,應使用簡化的圖,圖中只包含物件模型的重要概念——這些部分對于理解設計至關重要,本書中的圖都是我在專案中使用過比較典型的圖,它們很簡單,而且具有很強的解釋能力,在澄清一些要點時,還使用了一些非標準的符號,它們顯示了設計約束,但它們不是面面俱到的設計規范,它們只體現了思想綱要,

設計的重要細節應該在代碼中體現出來,良好的實作應該是透明的,清楚地展示其背后的模型,互為補充的圖和檔案能夠引匯入們將注意力放在核心要點上,自然語言的討論可以填補含義上的細微差別,這就是為什么我喜歡把典型的UML使用方法顛倒過來的原因,通常的用法是以圖為主,輔以文本注釋;而我更愿意以文本為主,用精心挑選的簡化圖作為說明,

模型不是圖,圖的目的是幫助表達和解釋模型,代碼可以充當設計細節的存盤庫,書寫良好的Java代碼與UML具有同樣的表達能力,經過仔細選擇和構造的圖可以幫助人們集中注意力,并起到指導作用,當然前提條件是不能強制用圖來表示全部模型或設計,因為這樣會削弱圖的清晰表達的能力,

書面設計檔案

口頭交流可以解釋代碼的含義,因此可作為代碼精確性和細節的補充,雖然交談對于將人們與模型聯系起來是至關重要的,但書面檔案也是必不可少的,任何規模的團隊都需要它來提供穩定和共享的交流,但要想撰寫出能夠幫助團隊開發出好軟體的書面檔案卻是一個不小的挑戰,

一句話:好記性不如爛筆頭,檔案應作為代碼和口頭交流的補充

每種敏捷程序在撰寫檔案方面都有自己的理念,極限編程主張完全不使用(多余的)設計檔案,而讓代碼解釋自己,實際運行的代碼不會說謊,而其他檔案則不然,運行代碼所產生的行為是明確的,

極限編程就是敏捷開發,敏捷開發不提倡寫太多檔案,能省就省,代碼多些注釋,代替檔案,

極限編程只關注對程式及可執行測驗起作用的因素,由于為代碼添加的注釋并不影響程式的行為,因此它們往往無法與當前代碼及其模型保持同步,外部檔案和圖也不會影響程式的行為,因此它們也無法保持同步,另一方面,口頭交流和臨時在白板上畫的圖不會長久保留而產生混淆,依賴代碼作為交流媒介可以促使開發人員保持代碼的整潔和透明,

將代碼作為設計檔案也有局限性,它可能會把讀代碼的人淹沒在細節中,盡管代碼的行為是非常明確的,但這并不意味著其行為是顯而易見的,就算技術人員可以看懂代碼,專業領域的業務人員怎么辦???所以,檔案還是有必要的,實事求是來制定開發方式和檔案撰寫方式,

檔案應當鮮活并保持最新,設計檔案的最大價值在于解釋模型的概念,幫助在代碼的細節中指引方向,或許還可以幫助人們深入了解模型預期的使用風格,根據不同的團隊理念,整個設計檔案可能會十分簡單,如只是貼在墻上的一組草圖,也可能會非常詳盡,

完全依賴可執行代碼的情況

良好的代碼具有很強的表達能力,但它所傳遞的資訊不能確保是準確的,一段代碼所產生的實際行為是不會改變的,但是,方法名稱可能會有歧義、會產生誤導或者因為已經過時而無法表示方法的本質含義,變數和代碼組織方式所表達出來的意思未必嚴格,好的編程風格會盡力使這種聯系直接化,但其仍然主要靠開發人員的自律,編碼時需要一絲不茍的態度,只有這樣才能撰寫出“言行全部正確”的代碼,

解釋性模型(重點來了,記好)

在實作、設計和團隊交流中使用同一個模型作為基礎,如果各有各的模型,將會造成危害,

模型在幫助領域學習方面也具有很大價值,對設計起到推動作用的模型是領域的一個視圖,但為了學習領域,還可以引入其他視圖,這些視圖只用作傳遞一般領域知識的教學工具,出于此目的,人們可以使用與軟體設計無關的其他種類模型的圖片或文字,

驅動軟體開發程序的技術模型必須經過嚴格的精簡,以便用最小化的模型來實作其功能,而解釋性模型則可以包含那些提供背景關系的領域方面——這些背景關系用于澄清范圍更窄的模型,

解釋性模型提供了一定的自由度,可以專門為某個特殊主題定制一些表達力更強的風格,領域專家在一個領域中所使用的視覺隱喻通常呈現了更清晰的解釋,這可以教給開發人員領域知識,同時使領域專家們的意見更一致,解釋性模型還可以以一種不同的方式來呈現領域,并且各種不同角度的解釋有助于人們更好地學習,

解釋性模型不必是物件模型,而且最好不是,實際上在這些模型中不使用UML是有好處的,這樣可以避免人們錯誤地認為這些模型與軟體設計是一致的,盡管解釋性模型與驅動設計的模型往往有對應關系,但它們并不完全類似,為了避免混淆,每個人都必須知道它們之間的區別,

例如:

考慮一個用來追蹤航運公司貨物的應用程式,模型包含一個詳細的視圖,它顯示了如何將港口裝卸和貨輪航次組合為一次貨運的操作計劃:

但對外行而言,類圖可能起不到多大的說明作用,

在這種情況下,解釋性模型可以幫助團隊成員理解類圖的實際含義,圖2-5是表示相同概念的另一種方式,

圖中的每根線段都表示貨物的一種狀態——或者正在港口裝卸(裝歡訓卸貨),或者停放在倉庫里,或者正在運輸途中,這個圖并沒有與類圖中的細節一一對應,但強調了領域的要點,這種圖連同對它所表示的模型的自然語言解釋,能夠幫助開發人員和領域專家理解更嚴格的軟體模型圖,綜合使用這兩種圖要比單獨使用一種圖更容易理解,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/1047.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