碁峰資訊

為了達成公司業務領域的目的和目標,它必須在多個子領域(subdomains)中運營。子領域是業務活動的細粒度(fine-grained)區域,公司的所有子領域構成了它的業務領域:它為客戶提供的服務。實行單一的子領域不足以讓公司取得成功;它只是整體系統中的一個建構區塊,子領域必須彼此互動以達成公司在其業務領域中的目的。例如,星巴克最聞名的也許是它的咖啡,但建立一個成功的咖啡連鎖店需要的不僅僅是懂得如何製作出好咖啡,還必須在有效的地點購買或租用房地產、雇用人員,以及管理財務等活動,這些子領域都不會單獨成為一家盈利的公司,所有這些都是公司能夠在其業務領域競爭所必需的。

DDD子領域的類型

正如軟體系統包含各種架構元件──資料庫、前端應用程式、後端服務等──子領域具有不同的戰略/業務價值。領域驅動設計(DDD)區分為三種類型的子領域:核心(core)、通用(generic)、支持(supporting),讓我們從公司戰略的觀點來看看它們有何不同。

核心子領域

核心子領域是公司與競爭對手的不同之處,這可能涉及發明新產品或服務,或透過最佳化現有流程來降低成本。

讓我們以Uber為例,最初,該公司提供了一種新穎的交通方式:共乘。隨著競爭對手的追趕,Uber找到了最佳化和發展其核心業務的方法:例如透過配對朝同方向前進的乘客來降低成本。

Uber的核心子領域影響它的盈虧,核心子領域是公司如何和它的競爭對手區別開來的方式,這是公司為客戶提供更好服務和/或最大化其盈利能力的戰略。為了維持競爭優勢,核心子領域涉及發明、智慧最佳化、商業技能知識(know-how),或是其他智慧財產。

複雜度。易於實行的核心子領域只能提供短暫的競爭優勢。因此,核心子領域自然是複雜的。繼續Uber的例子,該公司不僅透過共乘創造了一個新的市場空間,而且透過針對性地利用科技,顛覆了已有數十年之久的龐大計程車行業架構。透過了解其業務領域,Uber能夠設計出更可靠、更透明的交通方式。公司的核心業務應該要有很高的進入門檻(entry barriers);這應該讓競爭對手很難複製或模仿公司的解決方案。

競爭優勢的來源。核心子領域不一定是技術性的,並非所有業務問題都透過演算法或其他技術方案解決,一家公司的競爭優勢可以來自各種來源。

例如,想想看一家在線上銷售其產品的珠寶製造商,網路商店很重要,但它不是核心子領域,珠寶設計才是。該公司可以使用既有、現成的線上商店搜尋引擎,但不能外包其珠寶設計,設計才是客戶購買珠寶製造商的產品並記得其品牌的原因。

另一個較複雜的例子,想像一家專門從事手動詐欺偵測(fraud detection)的公司,該公司培訓其分析師檢查有問題的文件並標記可能的詐欺案件,您正在建立分析師使用的軟體系統,它是核心子領域嗎?不是,核心子領域是分析師正在做的工作。您正在建立的系統與詐欺分析無關,它只是顯示文件並追蹤分析師的評論。

通用子領域

通用子領域(Generic subdomains)是所有公司都以相同方式執行的業務活動。就像核心子領域一樣,通用子領域通常很複雜而且難以實行,但通用子領域卻不會為公司提供任何競爭優勢。這裡不需要創新或最佳化:經過實戰考驗的實踐已經廣為可用,所有公司都在使用它們。

例如,大多數系統需要對其用戶進行身份驗證和授權,與其發明專有的身份驗證機制,不如使用現有的解決方案更為合理。這種解決方案可能更加可靠和安全,因為它已經被許多其他具有相同需求的公司測試過了。

回到珠寶製造商在線上銷售產品的例子,珠寶設計是一個核心子領域,但線上商店是一個通用子領域,使用與其競爭對手相同的線上零售平台──相同的通用解決方案—不會影響珠寶製造商的競爭優勢。

支持子領域

顧名思義,支持子領域(supporting subdomains)支持公司的業務。然而,與核心子領域相反,支持子領域並沒有提供任何的競爭優勢。

例如,想想看一家線上廣告公司,其核心子領域包括配對廣告和訪客、最佳化廣告效果,以及最大限度地降低廣告空間的成本。然而,為了在這些領域取得成功,公司需要分類它的創意素材。公司把它的實際創意素材像是橫幅(banners)和登陸頁面(landing pages)儲存並編入索引的方式不會影響利潤,在這個領域沒有什麼可以發明或最佳化的。

從另一個角度來看,創意目錄對於實行公司的廣告管理和服務系統而言是不可或缺的。使得素材編目的解決方案成為公司的支持子領域之一。

支持子領域的顯著特徵是解決方案的業務邏輯複雜度。支持子領域很簡單,它們的業務邏輯主要類似於資料輸入螢幕和ETL(提取(extract)、轉換(transform)、載入(load))的操作;也就是所謂的CRUD(新增(create)、讀取(read)、更新(update)、刪除(delete))介面,這些活動區域不會為公司提供任何的競爭優勢,因此不需要很高的進入門檻。

比較子領域

只有核心子領域才能為公司提供競爭優勢,核心子領域是公司將自己與競爭對手區別開來的戰略。

根據定義,通用子領域不能成為任何競爭優勢的來源。這些是通用解決方案──公司與其競爭對手使用的相同解決方案。

支持子領域的進入門檻低,也不能提供競爭優勢。通常,公司不會介意競爭對手複製其支持子領域—這不會影響它在行業中的競爭力。相反的,從戰略上說,公司希望其支持子領域是通用的、現成的解決方案,從而消除了設計和建立實踐的需要。

公司能夠解決的問題越複雜,它可以提供的商業價值也就越大。複雜的問題不僅限於向消費者提供服務,一個複雜的問題可以像是使業務更有效率和最佳化,例如提供和競爭對手相同水平的服務,但是營運成本較低,這也是一種競爭優勢。

從更為技術的角度來看,辨別組織的子領域很重要,因為不同類型的子領域具有不同等級的複雜度,在設計軟體時,我們必須選擇適合業務需求複雜度的工具和技術。因此,辨別子領域對於設計完善的軟體解決方案而言至關重要。

支持子領域的業務邏輯很簡單,這些是基本的ETL操作和CRUD介面,業務邏輯顯而易見。它通常不會超出驗證輸入,或把資料從一種結構轉換為另一種結構的範圍之外。

通用子領域要更複雜得多,對於其他人為何投入時間和精力來解決這些問題,應該有其充分的理由。這些解決方案既不簡單也不普通,想想看例如加密演算法或身份驗證機制。

從知識可用性的角度來看,通用子領域是「已知的未知(known unknowns)」,這些是您知道自己不知道的事情。除此之外,這些知識很容易獲得,您可以使用業界認可的最佳實踐(industry-accepted best practices),或是如果有需要,聘請專門從事該領域的顧問來幫忙設計客製化的解決方案。

核心子領域很複雜,它們應該讓競爭對手盡可能地難以複製──公司盈利的能力取決於它。這就是為什麼在戰略上,公司指望將複雜的問題作為其核心子領域來解決。(本文摘錄整理自《領域驅動設計學習手冊》第一章,碁峰資訊提供)

圖片來源_碁峰資訊

 書名  領域驅動設計學習手冊(Learning Domain-Driven Design)

Vlad Khononov/著;徐浩軒/譯

歐萊禮出版

定價:580元

圖片來源_Vlad Khononov

 作者簡介 

Vlad(Vladik) Khononov是一位擁有超過20年產業經驗的軟體工程師,他曾在大大小小的企業中擔任過各種職務,範圍從網路專業人員到首席架構師都有。作為一位領域驅動設計的長期倡導者,Vlad幫助企業理解他們的業務領域、排解舊有系統(legacy system),並解決複雜的架構挑戰。

熱門新聞

Advertisement