1. 程式人生 > >一個引發程式設計師們幹架的問題

一個引發程式設計師們幹架的問題

如果第二次看到我的文章,歡迎「文末」掃碼訂閱我個人的公眾號(跨界架構師)喲~ 

每週五早8點 按時送達到公眾號。當然了,也會時不時加個餐~

 

在一個分散式系統的開發團隊中,有一些問題是很容易產生程式設計師之間矛盾的。

 

其中之一就是「業務歸屬」,就是當新加/修改一個業務的時候,程式碼變更應該放到你負責的系統還是我負責的系統裡?

 

一些業務輪廓很清晰的就不用說了,大家的認定都是一樣的。比如商品相關的放到商品服務,會員相關的放到會員服務。

 

但是對於輪廓模糊的業務,大家作出的決定就不一定相同了。

 

這個時候起決定性作用的並不是各自的工作經驗,而是你的「業務思維」是否具有全域性性,以及對全域性業務的瞭解程度如何。

 

 

一旦草率的作出了“不合適”的歸屬劃定,後續將會帶來大量的額外成本,協作、更高的bug率等等。

 

看看以下的場景是不是平時有見到過?

 

  • 嗨,小明,我這裡有個bug需要你和我一起除錯下。

 

  • 當初如果這個業務在這裡就好了,現在已經積重難返了,只能推倒重做了。

 

  • 我覺得這個問題可能是這裡導致的,也有可能是那裡導致的。

 

 

所以,一個業務歸屬於哪個專案,看似是一個很簡單的選擇題。但是每個人心中的預設選擇是不同的,比如以下兩種截然不同的傾向。

 

  • 我能解決的就我解決咯,實在解決不了的再給對方

 

  • 只能我這裡解決的就我這裡解決,其它的全部對方來

 

其實這些選擇都是因人而異的,很難形成一個放之四海而皆準的共識。

 

如果雙方都選擇第二點,產生衝突、爭執是必然的。

 

哪怕大家都選擇“為他人著想“的第一點,只是避免了相互扯皮,但還是無法避免後續業務邊界混亂付出的額外成本。

 

所以,我們還是需要從中提煉出本質的東西作為決策的準則。

 

 

Z哥我認為思考業務歸屬的時候,本質上還是逃不開「高內聚低耦合」範圍

,一個合理的專案歸屬認定,會讓軟體系統離每個人所期望的「高內聚低耦合」更近一步。

 

因為「業務歸屬」和「高內聚低耦合」一樣,都在“劃線”,明確邊界。

 

但是我們很多時候其實並不知道“線”應該具體畫在什麼位置,只是知道一個大概方位而已。

 

 

其實,如果當我們的系統只是一個單體應用的話,是不存在「業務歸屬」問題的。

 

因此它是在分工協作下所產生的一個副作用。

 

但是,只要我們繼續保持分工協作來開發一個分散式系統,這個問題就是繞不開的一道坎。

 

 

在工作中,由於邊界不清容易產生業務歸屬分歧的場景主要是以下兩點。

 

  • 一個新業務,需要兩邊配合完成

 

  • 一個老業務,一部分在A處理,一部分在B處理。

 

這裡先停頓一分鐘,想一想,如果是你的話,該如何來作出選擇?

 

 

Z哥我給你的建議是,你可以這樣來考慮:哪邊缺了這個業務的話,會導致至少一個流程走不通

 

 

來舉兩個例子幫助你理解。

 

一個電商網站現在要上線一個會員卡的功能,類似阿里的88會員這種。 

 

效果是買了這個會員卡的使用者,在該平臺購買自營商品時,享受8折優惠。

 

那麼你來思考一下?這個業務到底是放到「會員服務」還是「促銷服務」?

 

參照上面的建議來思考就是回答兩個問題:

 

  • 會員服務缺少了這個會員卡業務,是否有至少一個流程走不通?

 

  • 促銷服務缺少了這個會員卡業務,是否有至少一個流程走不通?

 

很顯然,會員卡雖然有一個打折功能,但是這個打折是建立在一個身份標識上的。

 

那麼就要思考一下,這個身份標識後續是否會在整個購物鏈路中的多個環節有露出展示或者對應的專屬業務,比如專屬客服、每月領福利等等。

 

另外你會發現,如果促銷想實現打8折的效果,可以完全不需要有會員卡的存在也能做到。

 

所以,這個會員卡本質更像是會員屬性的一個擴充套件,是跟著某個具體的會員走的。

 

假如最終不小心被歸屬到了促銷服務,則每次圍繞會員卡展開的業務都需要與促銷服務產生耦合才能完成,很明顯就背離了「高內聚低耦合」的初衷。

 

所以,對促銷服務來說,會員卡業務並不是必不可少的。相對來說,會員服務與它的關係更緊密。

 

至此,第一個例子的答案就出來了,應該放到會員服務。

 

 

再來看第二個例子。

 

隨著社交電商模式的崛起,該電商平臺想上一個拼團功能。

 

那麼這個功能該放到「購物車服務」裡?還是「促銷服務」裡呢?

 

同樣回答兩個問題:

 

  • 購物車服務缺少了這個拼團業務,是否有至少一個流程走不通?

 

  • 促銷服務缺少了這個拼團業務,是否有至少一個流程走不通?

 

首先,大家最容易想到的是,拼團一般都是直接下單,不經過購物車,自然不用放到購物車服務,放到促銷服務才是合適的。

 

這個理解完全合理。但是我們可以再想一下,拼團就必須要放到促銷服務裡嗎?

 

拼團其實也就是一口價,也不用經過促銷的價格計算。

 

如此看來,拼團對促銷來說也不是“剛需”。

 

這個時候將拼團服務獨立出來才是更好的選擇。因為在這個例子裡,缺少拼團業務,對兩個服務都不會產生流程上的阻礙。

 

反而獨立出來後,後續對拼團業務的調整,會更容易進行。不用對購物車服務、促銷服務產生任何影響。

 

 

至此,我相信你對如何判斷一個業務的專案歸屬已經有感覺了。如果你想貫徹「高內聚低耦合」作為系統的設計方針,不妨學習一下「領域驅動設計」。

 

這是由Eric Evans提出的概念,將建模作為、劃分系統邊界等等作為最高優先順序的開發模式。

 

我相信,隨著未來的業務越來越複雜,基於業務作為出發點考慮的軟體設計理念會越來越凸顯價值。

 

因為技術只是實現業務的介質之一,況且新技術的產生速度正在越來越快。

 

那麼,與其用最好新技術,不如替業務選擇最適合的技術。

 

 

好了,我們總結一下。

 

這次Z哥先幫你分析了一下產生「業務歸屬」分歧背後的原因。

 

然後,再分享了一個正確思考這個問題的建議,還舉了兩個例子。

 

以後再遇到拿捏不準業務該歸屬到哪個專案的話。只要記住一句話:哪邊缺了這個業務,會有至少一個流程走不通。如果都能通,那麼這個新業務就適合“獨立門戶”

 

在程式設計師們的日常工作中,容易發生分歧的問題還有很多,不過,其實大部分問題都有一個通解——全域性的業務思維。

 

 

推薦閱讀:

 


 

 

作者:Zachary

出處:https://www.cnblogs.com/Zachary-Fan/p/businessattribution.html

 

 

如果你喜歡這篇文章,可以點一下左下角的「推薦」。

 

這樣可以給我一點反饋。: )

 

謝謝你的舉手之勞。

 

▶關於作者:張帆(Zachary,個人微訊號:Zachary-ZF)。堅持用心打磨每一篇高質量原創。歡迎掃描下方的二維碼~。

定期發表原創內容:架構設計丨分散式系統丨產品丨運營丨一些思考

如果你是初級程式設計師,想提升但不知道如何下手。又或者做程式設計師多年,陷入了一些瓶頸想拓寬一下視野。歡迎關注我的公眾號「跨界架構師」,回覆「技術」,送你一份我長期收集和整理的思維導圖。

如果你是運營,面對不斷變化的市場束手無策。又或者想了解主流的運營策略,以豐富自己的“倉庫”。歡迎關注我的公眾號「跨界架構師」,回覆「運營」,送你一份我長期收集和整理的思維導圖。

article_end2.jpg

相關推薦

一個引發程式設計師的問題

如果第二次看到我的文章,歡迎「文末」掃碼訂閱我個人的公眾號(跨界架構師)喲~  每週五早8點 按時送達到公眾號

一個行走在路上的程式設計師創業者,希望將自己的故事分享給那些想要改變世界的程式設計師,共勉!!!

緣由 我是一個程式設計師,從1995年小學3年級就跟程式設計結緣,當時只是學校開的培訓班以為能玩遊戲就報名了,還學習了basic和logo語言,雖然沒有任何用處也學得不深入,但卻對我的一生產生關鍵影響,讓我喜歡上了程式設計,讓我覺得除了科學家、老師、醫生、畫家、作家之外,世

【神祕的程式設計師們】作為一個程式設計師星人,在地球上工作生活時,你是否會感到孤獨呢?這裡有來自程式設計師母星的親切問候和地球漫遊指南.國內首部以程式設計師文化、技術主題、專案管理及網際網路創業的為主題漫畫,誕生於09年.主創:西喬、.

作為一個程式設計師星人,在地球上工作生活時,你是否會感到孤獨呢?這裡有來自程式設計師母星的親切問候和地球漫遊指南.國內首部以程式設計師文化、技術主題、專案管理及網際網路創業的為主題漫畫,誕生於09年.主創:西喬、....

一個程式設計師PHP程式設計師說的話(看完後醍醐灌頂啊,醒醒吧程式)

我,一個老程式設計師,也是一個學生,把玩過甚多語言,大多不精。我既非名牌學校,也不是高學歷,僅代表一部分比較蛋疼的人。 接觸PHP也是很早了,從04年的OFSTAR開始的,到現在六年了,期間也接觸過不少的語言。從指令碼JS到底層的C語言。 坦誠的說,我不是個高手,但是我相信

一個Java程式設計師的阿里之路

前言 最近有些朋友在面試阿里,加上 Java-Interview 專案的原因也有小夥伴和我討論,近期也在負責部門的招牌,這讓我想起年初那段長達三個月的奇葩面試經歷。 本來沒想拿出來說的,畢竟最後也沒成。 但由於那幾個月的經歷讓我瞭解到了大廠的工作方式、對候選同學的考察重點以及面試官的套路

python 歷險記——一個 Java 程式設計師的告白(一)

引言 想學爬蟲還是 python 專業啊,之前一直在用 java, 現在決定嚐嚐鮮,使用 python及爬蟲框架來完成網路資料採集。 程式語言之間都是相通的,比如都需要模組化,引入其他檔案來實現功能,使用列表等容器來處理資料,都要使用 json 或 xml 來解析和傳輸資料。 你會發現通過 類比 的方式,帶

一個優秀程式設計師的自我修養

對於網路推廣來說,必然少不了代理IP的使用,像論壇發帖、微博推廣、百度問答等等,如果你想看到效果,就需要大量操作,但是同一個IP重複操作,必然會受到限制,這個時候必須使用代理IP比如太陽IP軟體的幫助,將效率和效果最大化。 當然這只是推廣過程中的一小部分,如果你想更好的去操作,就要多掌握一些操作技巧,這樣才

一個兼職程式設計師的自白——我是如何接私活的?

我是從16年開始做自由職業,當然不是完全自由,因為上市公司不太忙,所以就利用下班和週六日時間接單,一天差不多3-4個小時,每年收入6-8萬的外快。其實做過的都知道,想完全自由職業還是有一定的風險的,主要是專案不穩定(你可以把你自己看成是一個公司,需要找客戶),沒有安全感,所以建議大部分同學先利用下班

“技術型”VS“需求型”專案經理, 哪一個程式設計師罵的更多?

軟體專案的開發過程中,都會需要一個專案經理來監控這個專案的開發進度,同時給開發人員提供必要的技術支援。然而在實際的開發中,程式設計師並不一定會給專案經理好的臉色。究其原因有很多但最主要的就是,團隊成員之間的溝通不協調而造成的。最初的時候,需求沒有分析完整而導致後面的程式碼大量重構,同時又要不斷的根據

剛從阿里面試回來,想和程式設計師談談(想進阿里的必看)

       最近面試了多家網際網路公司,最終收到了阿里offer,面試前在網上也蒐集了面試題目, 但有些不是過時的,就是題目雜亂,歸納不繫統。 這次面試過後,我把面試上阿里的面試過程整理了一下,當做是一個總結,後來有朋友問我要面試記錄,索性發布出來,跟大家一起分享

Python程式設計師使用頻率最高的十五個Python庫 程式語言 python

Programming concept. Future technology smart glass 當下最火的,使用頻率最高的十五個Python庫!各位都有用過嗎?關注並私信小編00免費領取Python學習了 Scrapy Scrapy庫是用於從網路結構化檢索資料,可以用

做為一個Python程式設計師的基本素養

今天在學習的過程中,明白了一些不是Python標準所必須要做的事情,二是做為一個合格的Python程式設計師應該所遵從的一些規範 分享給大家,有不足的地方請大家指正,此下是我學習的一點心得: 1.在給變數賦值的時候比如 name="zhangsan"   這樣的程式碼看起來比較小氣,

一個程式設計師是如何手寫Spring MVC的?

人見人愛的Spring已然不僅僅只是一個框架了。如今,Spring已然成為了一個生態。但深入瞭解Spring的卻寥寥無幾。這裡,我帶大家一起來看看,我是如何手寫Spring的。我將結合對Spring十多年的研究經驗,用不到400行程式碼來描述SpringIOC、DI、MVC的精華設計思想,並保證基本功能完整。

一個JS程式設計師對機器學習的概念簡單手記

為什麼要學習機器學習,我認為有以下重要的三點: 可縮短我們的程式設計時間,比如可以通過機器學習學習垃圾話樣本,進行更快速更精準的垃圾話的檢測 普通程式設計方法難以解決的問題,比如使用者潛在喜好和使用者行為的預測 更重要的是擴寬我們程式設計師的思維邏輯,對於適用的方向能夠提出這方面的構思

一個程式設計師是如何手寫Spring MVC的

人見人愛的Spring已然不僅僅只是一個框架了。如今,Spring已然成為了一個生態。但深入瞭解Spring的卻寥寥無幾。這裡,我帶大家一起來看看,我是如何手寫Spring的。我將結合對Spring十多年的研究經驗,用不到400行程式碼來描述SpringIOC、DI、MVC的精華設計思想,並保證基本功能完整。

#一個JAVA程式設計師成長之路分享

我搞JAVA也有些日子了, 因為我比較貪玩,上進心不那麼強, 總是逼不得已為了高薪跳槽才去學習, 所以也沒混成什麼大牛, 但好在現在也已經成家立業, 小日子過的還算滋潤, 起碼頂得住一月近萬元的吃喝拉撒玩各種貸款信用卡 不為金錢過於發愁了。 我特別感謝當初貼吧遇見的那位大神, 雖然每個月也就聊那麼幾

一個野生程式設計師的真實自述:我是如何從數學專業學渣入坑程式設計師

1、引言 “恭喜你,成功的避過了所有的正確答案,選擇了錯誤答案”。沒錯,我是一個數學專業的普通大學生(準確地說,是學渣一枚),排除萬難,我終於還是入了程式設計師的坑(不好意思,給程式設計師抹黑了)!   (本文同步釋出於:http:/

Java程式設計師你和資深架構師之間差的不僅僅是年齡(進階必看篇)

導讀:閱讀本文需要有足夠的時間,這裡會由淺到深帶你一步一步瞭解一個資深架構師所要掌握的各類知識點,文末也會有一些相應的學習資料分享,你也可以按照文章中所列的知識體系對比自身,對自己進行查漏補缺,覺得本文對你有幫助的話,可以點贊關注收藏一下。 目錄: 一、基礎篇 二、進階篇 三、高階篇

從C++到Python,一個遊戲程式設計師的進階之路

我的第一份工作是一加國內知名遊戲公司的邏輯程式設計師,必須技能是C++,但是一開始只是寫語法和C++很類似的一種指令碼(後來知道是從一個開源指令碼引擎AngelScript修改而成的)。學習遊戲開發的流程,填資料,用指令碼定製各種任務、副本等等。第一年還很有興致,第二年開始就意興闌珊了。 後來熟悉了整個

一個程式設計師十年生涯總結(轉載)

今年是我大學畢業滿10年的日子,也是我投身IT技術的第10年。一直想能對過去的經歷做些回顧與反思,以更      好地走向未來,但總沒有筆。剛好CSDN舉辦“講述程式設計師的故事”徵文,這件事成了一個引子,我終於趁著暑期有時間,敲了一天鍵盤,便有了這篇人生自述。       10年對於一個人