架構師根本不會被語言限制住,php照樣可以用領域驅動設計DDD四層架構!

小傅哥發表於2020-10-13

作者:小傅哥
部落格:https://bugstack.cn

沉澱、分享、成長,讓自己和他人都能有所收穫!?

一、前言

你在通往架構師的路上嗎?

程式設計師這個行業就像是在不斷的打怪升級,突破每一階段的瓶頸期。

從畢業前想通過實習拿到offer、畢業後想通過試用期到轉正留下、轉正後程式設計師想做到高階開發、從高階該開發想做到架構師、從架構師想做到更高的總監或者CTO。往後的路越來越不容易,既需要需要個人不斷的沉澱學習,也需要一定的機遇機會。

在這條路線上架構師是一個瓶頸期的重要轉折點,因為這個階段遠不止個人的技術棧學習,還有很多其他能力,幾乎可以包括的有如下幾點;

  1. 有中大型專案開發落地經驗
  2. 有可靠的交付質量和統籌能力
  3. 能解決複雜專案的架構設計和推進執行
  4. 有一定的技術廣度和深度,改的了bug,處理的了事故
  5. 定得了規範、設計了架構
  6. 有一定的認知範圍,熟悉業務、產品和運營,瞭解運營規劃和業務發展
  7. 帶得了小組,推進專案落地和組內技術成長
  8. 有一定的專業影響力,能用技術創造價值
  9. 有緊急情況的應對能力
  10. 流程規範制定、方法論、開源專案的相關經驗

一個技術架構師要求可能不只這十點,還有很多軟實力。但這些很難通過培訓或者上課學來,因為這些能力都是實操經驗,需要長時間的磨練。

其實即使沒有架構師也不會缺少系統架構,這樣的小組並不需要養一個架構師,很多都是成套的快速搭建的技術,尤其像 SpringBoot 一整套服務,很適合小型公司使用。

但如果有非常複雜的系統架構和業務場景設計,包括幾十個系統的分組安排開發,提供支撐上百萬的QPS、秒殺的活動瞬時就有幾萬、以及需要隨著業務發展擴充套件到可以支撐幾百萬DAU的後臺服務。就需要架構師來整體把控,因為他可以從下單、到交易、到支付、到結算、到活動、到玩法,怎麼支撐、怎麼設計,提供出一整套的解決的方案,那麼這個體量複雜程度的系統,就不在是一個小作坊團隊能承擔下來的了。

二、技術棧閉環學習

你的技術能力足以支撐整個系統嗎?

小傅哥,技術閉環

其實很多程式設計師?‍?‍大部分都被侷限在產品的PRD裡,除此之外對整個全域性並沒有太多的認知。而且只是在技術範疇內也同樣被限定在某個語言下,比如後端研發基本開發不出一個完整的前端頁面、前端同學同樣也寫不出後端介面。

當然在某個技術語言下深扎不一定是什麼壞事,甚至可能還有一番創造和成績。只不過缺少了全域性的認知和了解,在某些時候會被限定到一個瓶頸期裡,在想成長到下一個階段就很難了。

或者更簡單的說,你能用你所會的技能搭建出一個技術部落格嗎,並運營起來。如果你沒做過這件事,那麼從你開始到完成你會發現。你需要的不只是java,還有UI設計,還有前端頁面,還有伺服器等等一套技術來支撐。同時,在某些時候你會為選擇用 java 還是其他語言而糾結,因為個人部落格的伺服器也是要付費的,java 伺服器的費用通常會貴一些。

所以,如果你的將來想自己做點什麼,就不要只被侷限在某個技術裡,也不要被侷限在某個領域中。瞭解瞭解業務熟悉熟悉運營也嘗試學學UI,這些知識的學習都遠比浪費可靠。

三、我那折騰的成長經驗

講道理,其實我是一個很愛折騰的程式設計師,當然別的事上我也愛折騰,尤其發明創造類的。

小時候我會把很多東西拆嘍,拿裡面的電機等小東西,在做一些玩具。比如;可以下水的電動小船、可以滑冰的小冰車、還有一些懶人小工具等。

隨著這樣的性格到學程式設計也是這樣愛倒騰,從初學程式設計就想著要自己做網站。從只會個html就開始買域名、備案、上線網站、裝b分享,這一套組合拳就開始折騰到現在。直到有了目前這個穩定的技術部落格網站 bugstack.cn 。這些讓我學到了很多額外的知識,也擴充了很多的黑技能。

1. 我有一個部落格引流

假如你有一個流量還可以的技術部落格,又新申請了一個公眾號,想把公眾號做起來。那你會怎麼做?

是不會想到在技術部落格找塊顯眼的區域,放置一張公眾號二維碼?但這樣的方式其實並不會有太多人關注,從現在比較流行話的來說,關注不關注並不會影響到使用者的利益。

所以,我們更希望的是在保證使用者體驗的情況下,儘可能的引導使用者主動關注。那麼最好的方式就是使用者閱讀文章時提醒關注,如果沒有關注只能閱讀文章的30%內容,關注即可閱讀全文。就像下面這樣的效果,如下;

小傅哥,部落格引流

這個效果最終的結果就是使用者在閱讀文章時,可以引導使用者關注公眾號傳送指定的編碼進行解鎖,解鎖後允許使用者閱讀,流程如下;

小傅哥,技術流程圖

2. 為了引流要付出多少成本?

小傅哥,伺服器成本支出

這是使用Java語言,開發一個把部落格使用者引流到公眾號服務,一年大概的成本。當然不同的雲服務廠商的價格以及活動時略有不同,但按照每年的平均價格計算,大概會在1800.00元左右。

這個錢?也不是太貴,但放在整個成本核算的服務裡,這樣的投入就是蠻高的了。除非你的公眾號收入可以抵消這部分投入,並且還有一些收益那麼是可以的。另外這裡我們還沒有計算人工投入,對號主就是那個多種角色的人工:產品 + 研發 + 視覺 + 業務 + 運營 = 號主!

可能你不知道,Java服務是貴一些,但還有php的伺服器便宜呀,價格差多少呢?以php的虛擬機器為例,一年的價格是198元。而且這個php虛擬機器還包括了1G的資料庫資源,與java伺服器相比確實很省錢。

所以,選擇php開發這套公眾號與部落格打通的後端服務,就顯得非常適合。

3. 使用PHP搭建DDD四層架構

好多年前我也自學過PHP,得益於那句:”php是全世界最好的語言!“。

因為在這條學習的道路上愛折騰,所以C++、C#、PHP、PLC、中繼器等也都開發過。但太久不用所以也忘的7788了,可為了能省錢我用一天時間把PHP又學會了

其實有了一定的程式設計經驗,語言之間是有一定的相似度的。你只要按照你的想法實現即可,任何一個語言都會提供給你相應的實現方式,不知道?搜就可以!就像下面這個PHP的領域驅動設計四層架構,與Java很是相似。如下;

小傅哥,PHP與領域驅動設計

咳咳,這裡我沒有選擇使用php的一些框架,例如 thinkphp、laravel等。畢竟框架對我來說開發一個公眾號的後端服務,還是稍顯笨重。按照我的想法邏輯,搭建一個DDD四層架構按照我實現Java的方式實現PHP程式碼即可。實現方式也會非常快,最後只花了1天時間就把整個服務寫完並部署上。這包括;程式碼開發、資料庫配置、服務上線、介面切換、SSL、跨域等。所以,我一直想說不要只做個工具人,要鋪設的全面一些!

例子,讓你看看現在的PHP與Java像不像;

  1. 定義方法名稱用function,public function entry()
  2. 建構函式public function __construct(),可以初始化一些資訊
  3. 字串用點連線,$openId . "_" . $token
  4. 介面用interface定義,interface LogicFilter
  5. 類的引入包,require_once
  6. 方法呼叫用指標,$this->msgEngineHandle->process($behaviorMatter);
  7. 資料庫連線,new mysqli()
  8. 定義屬性,var $openId;
  9. 獲取入參,$_GET['token']
  10. 輸出結果反饋到介面,echo

... 等等,還有很多。你所有的邏輯實現只要在Java裡可以的,PHP也都有相應的支援。這就是語言建設的規範,並在某些命名也是保持統一的。

四、總結

  1. 這呢就是我在10.1放假的最後一天,把Java語言開發的公眾號後臺,切換成PHP的經歷。但程式碼結構沒變,依舊是我喜歡的DDD領域驅動設計。重要的是省錢了!,這裡還有一個Java版本的公眾號後臺開發。Java版DDD四層架構,開發公眾號服務端
  2. 如果你希望自己,不只是程式設計這條路上的PRD工具人。那麼一定要大力的鋪設自己的技術棧和其他不只是研發的開發能力。當你真的去了解業務、運營、產品後,相信你可以寫出更加符合市場的程式碼。同時這些軟技能,可以幫助你走向更高的階梯!
  3. 好車上道都不響、破車上路才嘰裡呱啦的!無論你在哪一行或者哪一方向努力,都可以默默的堅持著。可以在一條路上走的很久,總比每天都想著換方向要重要的多。不要做一個簡單的男人,加油!
  4. 對了,在打個廣告??;
  • 15年,會Netty就能去大廠
  • 16年,懂分散式開發就能去大廠
  • 17年,熟讀Dubbo原始碼就能去大廠
  • 18年,會寫中介軟體就能去大廠
  • 19年,會演算法就能去大廠
  • 20年,上 bugstack.cn 學習,就能去香河大廠

五、系列推薦

相關文章