1、前言
在作企業服務類(ToB)的產品時,咱們常常會遇到以下場景:前端
每一個客戶拿着他們的需求清單,來諮詢咱們的產品是否可知足他們的訴求。如圖所示:git
每一個客戶的需求有重疊的內容,也有不同的內容,而這些需求,在某一領域均具備較強的通用性。github
如何知足這些客戶需求的同時又能使各個需求沉澱爲標準功能,而不只僅是爲了交付項目?這成爲ToB類產品經理思考最多的問題。算法
爲支撐客戶訴求,基本的作法是抽象各個需求,落地爲標準功能,將各個功能拼裝成一個產品。可是一段時間後你們就會發現功能越堆越多、產品越作越龐大,可是用戶體驗卻愈來愈差,產品開發維護愈來愈困難。
如何既能知足客戶訴求,又能解決產品存在的這些問題?模塊化設計是一個方向。後面咱們展開介紹下,數棧在模塊化設計方面的一些經驗供參考。框架
2、模塊化設計介紹
(一)目的運維
- 從商務銷售的角度說,產品模塊可自由組合報價,貼合不一樣客戶的需求,提升產品銷售的成單率。
- 從產品研發的角度說,減小重複造輪子的現象,提升研發效率和產品擴展性。
(二)落地經驗
模塊化設計在數棧平臺的落地實施,從大到小主要分爲下面三種方式:模塊化
- 子產品化
- 公共模塊
- 組件/插件化開發
一、子產品化
1)需求背景:
每一個客戶,甚至同一個客戶在不一樣階段,對數據中臺的理解都不盡相同。工具
- 好比客戶A是個中等規模企業,但願能有款產品幫助他建設離線數倉,知足基本的數據開發訴求,那數棧的離線開發模塊就能夠知足他們的訴求。
- 好比客戶B是個大型的集團企業,但願能從數據開發、數據服務、數據治理等多個方面搭建起集團數據中臺,那就得輸出一整套數棧去知足該客戶。
2)設計思路:url
- 產品上——根據業務邏輯,各個模塊獨立解耦,定位升級爲子產品,負責解決不一樣的業務場景訴求。
- 商務上——銷售時可單獨報價輸出,也可組合報價輸出。
3)落地成果:
數棧做爲一款數據中臺產品,其中包含了:離線開發、實時開發、算法開發、數據服務、數據資產、數據質量、智能標籤等子產品,每一個子產品可解決不一樣的業務場景訴求,並支持獨立、組合部署。spa
二、公共模塊
1)需求背景:
數棧的各個模塊獨立化成子產品後,雖然能夠解決不一樣的業務場景訴求,可是在數據中臺這個框架內,仍然會存在一些相同的基礎功能訴求,好比用戶體系、數據源管理、任務運維等。若是每一個子產品內部獨立實現,會存在兩個問題:
- 增長了用戶的使用成本。好比相同的用戶、相同的數據源須要在各個子產品內屢次維護,並且還容易形成理解歧義。
- 增長了產品的研發成本。相同的功能須要重複實現,重複造輪子,浪費研發資源和運維成本。
2)設計思路:
- 剝離各個子產品中的通用功能做爲公共模塊,統一進行維護管理,而後爲各個子產品提供服務。
- 公共模塊的設計須要充分調研各個子產品的訴求。對於通用訴求,抽象出標準功能;對於拓展訴求,提供配置化功能;對於個性訴求,由子產品自行實現。
3)落地成果:
三、組件/插件化開發
1)需求背景:
若是說前兩部分的模塊化設計是對產品經理能力的考驗,那這部份內容更可能是對開發人員的要求。
下面介紹咱們在平常工做中遇到過三個問題場景:
a、產品設計時,須要新增一個輸入框,要求是:屬於必填項、內容格式限制中英文、長度限制255字符。
需求很簡單,可是每次評審時,產品經理都得給研發說明若是爲空時怎麼提示、內容不符合格式要求時怎麼提示、長度超過限制時怎麼處理,溝通成本極大,而這僅僅是整個原型設計中1%都不到的內容。
b、產品設計時,須要複用另外一個模塊中的表單,表單中維護的各個表單項、表單項關聯邏輯均相同。
功能徹底一致,可是研發調研後發現,原有的表單處理邏輯和業務處理邏輯強耦合,致使表單代碼沒法複用,須要從新獨立開發。
c、在產品迭代過程當中發現存在一類需求,更新相對頻繁,需求邏輯具備必定共性,並且更新不會涉及已有功能的改動。
這類需求對於開發,和公共模塊之於產品相似,能夠抽象爲一種公共技術能力對外提供服務。好比我司常常會遇到的需求有:新增支持一種數據源、引擎新增一種任務類型等。
2)解決方案:
- 前端沉澱標準組件庫。對於一些經常使用的設計,經過組件複用來減小開發和產品的工做量;目前咱們已沉澱30+前端組件,並在持續迭代中。
- 代碼的低耦合設計。這部分要求比較虛,並且沒有很是明確的邊界,依賴開發經驗和對業務的理解,須要持續成長。
- 插件化設計。區分應用層代碼和底層代碼,底層代碼進行插件化封裝,可爲上層不一樣的應用提供支持,在支持快速迭代的同時又不會影響已有功能,這樣應用層開發能夠投入更多地精力去支持業務。目前已落地:數據源插件、數據同步插件、Engine插件、血緣解析插件。
3、總結思考
模塊化設計是一種解決方案,並非最終目的,所以,在產品設計時不能爲了模塊化而模塊化。尤爲是產品初期,此時產品功能並不豐富,並且爲了快速迭代搶佔市場,並不適合投入較多的精力去作這個事情。可是一旦產品進入穩定發展期,產品經理和研發同窗都應該開始思考模塊化設計在平常工做中的應用了。
模塊化設計並非產品換個名稱、獨立作個頁面就是模塊化了,業務層面如何劃分、模塊之間如何配合、插件剝離的邊界在哪,代碼邏輯怎麼解耦等等,這些都是須要思考的地方。
數棧是雲原生—站式數據中臺PaaS,咱們在github和gitee上有一個有趣的開源項目:FlinkX,FlinkX是一個基於Flink的批流統一的數據同步工具,既能夠採集靜態的數據,也能夠採集實時變化的數據,是全域、異構、批流一體的數據同步引擎。你們喜歡的話請給咱們點個star!star!star!
github開源項目:https://github.com/DTStack/flinkx
gitee開源項目:https://gitee.com/dtstack_dev_0/flinkx