從一個小需求談談如何鍛鍊編程思維

前言

大家好,我是node哥哥,一個被bug耽誤了才藝的屌絲青年。最近我聽說很多萌新們拿到需求一臉懵逼,沒有思路寫代碼,那我這篇就講講如何寫出符合需求的代碼。

故事

話說這天,夜裏11點多了,我在公司加班剛寫完bug,正悠哉悠哉地準備掏出手機搞一把農藥再走(話說最近好坑>_<單排連跪,難受),突然遠處晃晃悠悠的出現一個身影。

我一驚,這麼晚了,是誰?

走近一看,臥槽,原來是公司剛來的實習生小哥哥。

我: 我靠,老弟,你要嚇死我嗎?這麼晚了你咋還不回去啊?

小哥哥: (抓了把頭髮,苦着臉) 啊,老哥你還在啊,我這不正發愁呢嗎…

我: (搬了個椅子坐下,順手剝了小哥哥的橘子🍊吃了起來) 怎麼講,老弟?跟我說說唄,讓我給你分析分析

小哥哥: (偷偷的把剩下的一個香蕉藏了起來) 啊…是這樣的。這周老闆給了我一個任務,讓我寫一個登錄的接口,我感覺挺簡單的,就一口答應了。結果都到了週四晚上了,我還沒想好從哪開始寫…我是不是很菜啊?難道我不適合編程麼…(又抓了一把頭髮)

我: (開始心疼小哥哥…的頭髮,畢竟程序員最寶貴的就是頭髮了,他這麼一把一把的抓,到最後肯定跟我一樣,禿了半邊) emm…小哥,你先別摧殘你的髮際線了,聽我說。這個登錄功能雖然挺簡單的,但是如果是新手,沒怎麼寫過代碼,確實不好實現,我來帶你分析分析需求和功能設計吧

小哥哥: (忙停下了抓頭髮的手,把剛纔藏起來的香蕉🍌掏出來給我) 真的哈,老哥,你太好了!

我: (一邊剝香蕉皮,一邊開始拿出紙筆) 嗯,你想想,如果你打開一個陌生的網站,比如全球最大的同性交友網站 github ,你想登錄進去看看大佬們寫的騷代碼,第一步幹什麼?

小哥哥: 那肯定是先輸入賬號密碼咯…

我: 對呀,這個賬號密碼不就是用戶發送給後臺服務用於檢驗權限的憑證嗎?那我們的登錄接口是不是有兩個參數?賬號(account)和密碼(password)。

小哥哥: 是的,那有了賬號密碼之後呢?

我: 用戶輸入完賬號密碼,是不是就點擊登錄按鈕?那這個登錄,是不是就是前端向你的服務端發起請求?這個請求就是前端把賬號密碼通過接口傳遞給你,至此,用戶的操作就完成了,剩下的就是你服務端的工作了。

小哥哥: (扶了一下黑框眼鏡) 噢噢,我有點懂了。那麼我的接口拿到了用戶的賬號密碼,是不是就開始檢驗用戶是不是合法了?

我: 對,但是你還需要做一個工作。一般用戶的賬號密碼是存在數據庫的,所以你需要寫一個從數據user表根據賬號密碼查詢用戶的數據庫接口,也就是說你將前端傳來的賬戶和密碼作爲參數去數據庫查詢一次。

小哥哥: 嗯嗯,這個我知道。我學過springboot,可以用mybatis或者jpa操作數據庫。

我: 哈哈,數據庫訪問的工具有很多,不同的場景我們可以使用合適的工具。那麼從數據庫查詢了結果出來,我們就可以判斷了,如果數據庫查詢到了記錄。說明用戶真實存在,返回給前端一個成功的狀態碼,否則,用戶不存在,也給出相應的提示。返回結果一般是這樣的:

//驗證成功
{
"code": 0,
"msg": "登錄成功",
"data": userInfo
}
//驗證失敗
{
"code": -1,
"msg": "賬號或密碼錯誤",
"data": null
}

前端拿到後端返回的信息,可以直接把json裏msg返回給用戶,也可以根據code自定義相關的提示話術。

小哥哥: 搜嘎!我好像知道怎麼做了!我來理一下:

  1. 用戶打開交友網站,輸入賬號和密碼,點擊登錄
  2. 前端請求我寫的登錄接口把用戶的賬號密碼發送給我
  3. 我有一個登錄的controller,裏面有一個登錄的接口,接口的請求路徑是: /session,請求方式是post,請求數據格式是 url參數,把這些跟前端約定好,他就可以順利把數據傳給我
  4. 我拿到賬戶密碼後就開始把它們作爲參數查詢數據庫,看看用戶是否存在
  5. 根據查詢的結果返回給前端相應的json數據
  6. 前端根據我返回的結果再給出相應的提示,告訴用戶登錄成功或失敗

我: (趁他講的時候不動聲色的又把小哥哥的麪包🍞偷吃了) 嗯哼,小哥,思路清晰了吧?哈哈,其實啊這個只是最最簡單的登錄模型呢。一個商用網站的登錄往往比這個複雜的多哦。比如前端用戶可登錄次數的限制,密碼傳輸的加密,短信登錄,免密登錄,驗證碼檢驗,服務端網關攔截非法請求,服務端在用戶登錄之後做的一系列的業務操作等等…

小哥哥: 啊,這麼多?我又懵圈了…

我: 沒關係,小哥。我剛纔幫你分析的過程你還記得吧。記住從用戶的需求出發,模擬用戶的操作,再想一想用戶操作對應的前端請求是什麼,前端請求來了後端做什麼業務操作,返回什麼樣的信息給前端。最好你畫一個流程圖,就像你剛纔那幾個步驟一樣,根據流程圖把每一個小點都列出來,畫好他們之間的前後關係,這對你寫代碼幫助非常大哦~

小哥哥: 嗯嗯,是這樣的。剛纔我理了一下,思路清晰多了。其實後端的話就接口層,業務層,數據庫訪問層這些,層次還是比較清晰的。接口層可以對用戶輸入的參數做一些檢驗,比如用戶輸入的賬號密碼是否爲空,長度是否合法等等;業務層主要是解決一些需要邏輯處理的業務,比如賬號密碼的校驗,發送郵件,發送短信,緩存用戶信息等等;數據庫層呢負責數據訪問,比如用戶的增刪改查等。

我: 哇小哥哥,你真棒!總結的很好呢。

小哥哥: (有點不好意思) 老哥,謝謝你,我請你吃夜宵吧…

我: 好嘞,走着~

每天一個Java小技巧,今天你學廢了嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章