今天我們繼續(xù)軟考后第2篇產(chǎn)品有關(guān)的寫作。我們要談一個同行們都會遇到的問題,面對復(fù)雜需求時,如何邁出第一步?這里不賣關(guān)子,豆芽君的解法就是對問題進(jìn)行分層。 我們先回答一個問題:分層和分解有什么區(qū)別? 分層和分解有何區(qū)別? 學(xué)習(xí)過金字塔原理、結(jié)構(gòu)化思維、軟件開發(fā)設(shè)計的朋友,對分解都不陌生。它是一種結(jié)構(gòu)主義,假設(shè)了要完成一件復(fù)雜的事,通過逐層分解,最終是可以分解成一個個具體的動作。 比如美食博主們要做一份蒜香蝦,他能把這份美食的材料組成、烹飪過程都分解得一清二楚。屏幕前的我們,仿佛看完后,自己已經(jīng)預(yù)演操作了一遍。 那么我們今天要說的分層又是什么?分層相比分解,它更抽象。同樣舉個我們常見的例子來感受下分層。 公司定了一個產(chǎn)品目標(biāo),要向市場推出一套新的辦公系統(tǒng)。如果你是一名產(chǎn)品經(jīng)理,你會如何制定這個產(chǎn)品開發(fā)計劃?這件事有標(biāo)準(zhǔn)做法嗎? 有的產(chǎn)品經(jīng)理會采用先調(diào)研內(nèi)部高層的目標(biāo),再尋找市面的競品,最后再來梳理產(chǎn)品的用戶群、功能定位、差異化。而有的產(chǎn)品經(jīng)理則會先開展外部調(diào)研,了解外部客戶的需求,再回來和公司高層分享市場信息,最后再來考慮自己的產(chǎn)品設(shè)計。 我們能說哪種做法更正確嗎?這很難說。他們的差異更多是取決于他們所在組織的工作文化和產(chǎn)品經(jīng)理的工作方式偏好。 但你認(rèn)真對比下這兩種做法,能抽象出它們有什么共性嗎?建議你想一想,再往下看 簡單地理解,兩種做法的背后都是先調(diào)研、分析,再定目標(biāo)。雖然它們的具體步驟是不同的,但有一點(diǎn)是相同的:先規(guī)劃(規(guī)劃層),再行動(執(zhí)行層)。 認(rèn)真觀察我們周圍,不少人接到一項(xiàng)任務(wù),習(xí)慣性就開始采用【分解】的做法,他們相比那些想都不想,直接開干的人已經(jīng)上了一個臺階。但大家具體一聊的話,會發(fā)現(xiàn)他們常常面臨諸多問題,不知道怎么分解才是對的。原因是他們把不同層次的問題都夾雜在一起考慮,導(dǎo)致無從開始做分解。 這也是我們今天分享【分層】這個主題的意義所在。 分層到底能解決什么問題? 我們先看看分層的一些典型應(yīng)用 從公司的職務(wù)來看,至少分為高層、中層、執(zhí)行層。大家有沒認(rèn)真想過不同職務(wù)層的人他們?nèi)绻麉⑴c到同一件事,他們各自的工作是什么嗎?這里就是我們要講的分層最通俗的應(yīng)用。 一般來說高層解決定目標(biāo)的事,中層處理定流程、規(guī)范的事,執(zhí)行層干類似搬磚的事(沒有貶低任何一方得事,高層和中層可能也不會搬磚了,各司其職而已)。 那么為什么要對組織架構(gòu)進(jìn)行分層?其實(shí)這種分層對應(yīng)著組織在開展業(yè)務(wù)過程中所需的分工、協(xié)作。有資源、有行業(yè)經(jīng)驗(yàn)的高層,他們負(fù)責(zé)制定業(yè)務(wù)的戰(zhàn)略、目標(biāo);有管理經(jīng)驗(yàn)、能力強(qiáng)的中層,他們則負(fù)責(zé)梳理業(yè)務(wù)開展的規(guī)范、分工;有專業(yè)能力的執(zhí)行層,負(fù)責(zé)落地具體的分工任務(wù)。 大家有繼續(xù)想一個更復(fù)雜的問題?這三者分工的事,最終能像膠水粘出一件像樣的成品嗎?不然這就是各說各話,各做各事,最后干的結(jié)果可想而知。 好,我們重點(diǎn)介紹下在軟件的分層設(shè)計,這種工程領(lǐng)域,它們是如何分層以及連接?(以下內(nèi)容部分來自AI,豆芽君根據(jù)我們讀者的背景知識進(jìn)行調(diào)整)。 三層架構(gòu)是一種經(jīng)典的軟件設(shè)計模式,將應(yīng)用程序劃分為三個邏輯上的層次,分別是表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層。下面是每層的具體分工以及它們之間的協(xié)作方式: **表示層**: 系統(tǒng)與用戶交互的界面,負(fù)責(zé)展示數(shù)據(jù)和接收用戶輸入。它處理圖形用戶界面的顯示邏輯、用戶輸入驗(yàn)證以及用戶操作響應(yīng),但不包含業(yè)務(wù)處理邏輯。 **業(yè)務(wù)邏輯層**: 系統(tǒng)的核心,封裝了所有的業(yè)務(wù)規(guī)則和邏輯處理。它接收來自表示層的請求,進(jìn)行必要的業(yè)務(wù)處理(如計算、事務(wù)處理、邏輯判斷等),并可能調(diào)用數(shù)據(jù)訪問層來獲取或更新數(shù)據(jù),最后將處理結(jié)果返回給表示層。 **數(shù)據(jù)訪問層**: 負(fù)責(zé)與持久化數(shù)據(jù)存儲(如數(shù)據(jù)庫、文件系統(tǒng))進(jìn)行交互,包括數(shù)據(jù)的讀取、寫入、更新和刪除操作。它的主要目的是為業(yè)務(wù)邏輯層提供一個抽象層,隱藏數(shù)據(jù)存儲的具體細(xì)節(jié)。 **層與層之間的工作銜接**: ▎表示層向業(yè)務(wù)邏輯層請求數(shù)據(jù)或服務(wù),當(dāng)用戶在界面上執(zhí)行操作時,表示層收集用戶輸入,將其封裝成請求或參數(shù),然后調(diào)用業(yè)務(wù)邏輯層的接口或方法。 ▎業(yè)務(wù)邏輯層接收到表示層的請求后,執(zhí)行相應(yīng)的業(yè)務(wù)邏輯處理,如果需要訪問數(shù)據(jù)庫,它會調(diào)用數(shù)據(jù)訪問層的方法來完成數(shù)據(jù)的CRUD(創(chuàng)建、讀取、更新、刪除)操作。 ▎數(shù)據(jù)訪問層處理與數(shù)據(jù)庫的通信,執(zhí)行SQL查詢或其他數(shù)據(jù)訪問操作,并將查詢結(jié)果返回給業(yè)務(wù)邏輯層。 ▎業(yè)務(wù)邏輯層根據(jù)從數(shù)據(jù)訪問層獲得的數(shù)據(jù),進(jìn)一步處理(如格式轉(zhuǎn)換、邏輯運(yùn)算等),然后將最終結(jié)果封裝好,通過接口返回給表示層。 ▎最后,表示層接收到來自業(yè)務(wù)邏輯層的結(jié)果,更新用戶界面,展示所需的信息或處理結(jié)果,完成與用戶的交互循環(huán)。 相信具備點(diǎn)計算機(jī)基礎(chǔ)的你,是可以看出表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層是通過一種自上而下請求,然后自底向上返回的方式來完成三者的連接的。 不知道好奇的你,會不會進(jìn)一步追問,難道不分層不行嗎? 答案是:真不行。理由是一方面人員的術(shù)業(yè)有專攻,很少有工程師同時掌握前后端的所有開發(fā)技術(shù);另一方面業(yè)務(wù)的發(fā)展、變化,如果系統(tǒng)不分層,會造成每一個調(diào)整都牽一發(fā)動全身,影響業(yè)務(wù)的正常開展。 所以說分層是為專業(yè)化、復(fù)雜性而生的。 講到這,你回過頭來想想,為什么要先分層?再考慮分解? 分層的目的是考慮不同階段所要達(dá)成的目標(biāo),而分解是對每個層次目標(biāo)的具體工作分解。如果跳過分層,直接進(jìn)入分解,就容易擴(kuò)大問題范圍,造成問題失焦。 如果我想了解分層,怎么入門? 聽起來分層好像很厲害,但又很抽象。如果我想用下【分層】這種做法,可以怎么樣上手? 豆芽君又偷懶用了下,用AI查了分層的一些應(yīng)用工具。你可以網(wǎng)上去看看三個工具:分層直方圖、分層排列圖和層次分析法,和它們的具體應(yīng)用案例。 相信看完后,你就不會覺得這個概念太玄乎,動手去分析一個復(fù)雜問題的分層吧。比如說時下最火的AI,你能分析下它的組成是什么嗎?普通人如果想進(jìn)入這個領(lǐng)域去做些副業(yè),可以怎么開始?歡迎你來一起討論。 |
|