手把手教你從0到1進行Java專案實踐
手把手教你從0到1進行Java專案實踐
雖說工作就是簡單的事情重複做,但不是所有簡單的事你都能有機會做的。
我們平日工作裡,大部分時候都是在做修修補補的工作,而這也是非常重要的。做好修補工作,做好優化工作,足夠讓你升職加薪!
但是如果有機會,去嘗試些自己平日裡少做的事,我覺得是一件值得慶幸的事。
前段時間,接了個新專案。只有一些idea在業務需求方腦海裡,然後就開始需求討論,然後就開始做事了。專案不復雜,但是由於是用JAVA語言實現(這相對來說是我的薄弱點),對我個人顯得比較有意義。
總結下來,其實也就是一個專案清單。個人覺得還是有點意義吧,給沒有一定全面實踐的同學參考吧!
1. 專案規劃
1.1 首先,你得徹底明白到底要做什麼?
這個過程,可能是你要讀需求一遍、兩遍、三遍。。。 然後假設,你已經在使用這個產品了。
1.2 其次,明白需求後,就要進行整體框架的構思!
比如用什麼呈現給使用者,用什麼來儲存資料,需要些什麼樣的系統等。
在這個層次上,一般都會遵循公司的規定,然後再根據專案本身需求,做些相應的調整。
我們在這個專案裡的整體框架為:前端使用 APP(ios&android)、H5進行使用者介面呈現 ===>> 接入閘道器進行資料加解密,流控轉發等 ===>> 第一層API服務,接受客戶端請求,做簡單業務檢驗組裝 ===>> 第二層核心業務SERVICE服務,進行核心業務處理,如寫庫、呼叫第三方介面等 ===>> 最下層基礎服務,提供單一的功能服務,如訊息服務,訂單服務。
前期只提供APP,因此不存在單獨H5呼叫API服務的情況,但是H5的應用場景仍然存在,此時的H5地址,由服務介面提供地址返回到APP進行webview載入。
1.3 人員規劃
專案整體框架出來後,得要有人去實施才行。
這裡一般需要遵循一個最小原則,即劃分出的人員,儘量做到能夠獨立完成自有的模組,而不是一定要依賴於另一方的實現才能進一步。比如 android,ios各一人,API與SERVICE可以多個人,但是都要讓其有全部許可權,因為API與SERVICE有強依賴,脫離一方,將無法獨立完成。基礎服務各自安排相關人員實現。最後進行聯調即可。
1.4 時間規劃
有了人員之後,也不能無限時間的去做事。肯定是要規劃的,否則沒有壓力也沒有動力。專案不知何時才能結束。訂時間計劃一定要去詢問當事人,要多少時間,儘量站在專業的角度給出合理的建議和評估。促進專案的完成。
2. 框架規劃及搭建
2.1 有了整體框架的構思後,就要細節到每個層次的實踐了
因為都是應用的分層,所以,不可能有統一的描述,只能是針對每個應用層。做自己該做的事。如 android/ios 有自己的開發框架;h5有自己的開發框架(因為很多應用場景可能涉及到h5與app原生的互動,所以即使功能簡單,也儘量利用一些已有的框架進行開發)。
而服務端,雖分為多層應用,但是應儘量使用同一門語言,利用同一套開發框架,自己公司有研發框架自然最好,沒有也儘量利用統一的開源框架。這樣做的好處是,當有人員變動時,可以立即熟悉其程式碼及應用場景,從而增加適應性和管理性。
針對服務端的框架,我覺得有必要多說點。因為整個應用執行的流暢性,可靠性,準確性,都是由服務端來決定的。雖然使用者看到的是APP或者H5,但是可以說,服務端才是應用的核心。所以,服務端要做的事情自然很多了。
2.2 怎樣搭建好一些服務端的框架呢?
首先,框架類的東西,自然是要提前學習的。但是,就目前市場行情來說,要想利用框架應該都是比較簡單的,尤其是公司內部提供的框架,一定要有demo。這樣,照著demo,一步步除錯,直到整個應用接通;
刪除不需要的模組,新增特別需要的模組,保證在具體開發過程中,能夠想利用啥就有啥可利用;
充分了解框架需要的一些配置引數,知道事務從哪裡來,到哪裡去?這裡,應有一個配置中心與之對應,但是自己得清楚。
使用一個順手的IDE工具,不是說你技術不夠牛逼,而是一個好的工具,能夠讓你事半功倍。(其實能夠多背點套路,也不一定非要體現在正式專案上)
寫出第一個可供使用的介面服務,可以說,第一個永遠是比較重要的。因為,第一個的思路,就是你後續所有功能的方向,因此,寫好第一個”hello, world.”;
3. 開發環境的搭建(服務端)
3.1 其實這項工作是及其重要的,之所以把它放在第三點,是因為,沒有程式碼作鋪墊,開發環境搭了也沒用。
3.2 開發環境的搭建,主要也是服從於整體框架的構思。
主要包括,需要多少個服務,需要多少臺伺服器,需要多少個基礎應用,需要多少個基礎配置等等。
當然,開發環境本身就是一個很大的難題,一般還是交給專業運維幾十年的老司機來完成了。自己就當作瞭解得了。
目前的專案開發,除一些小規模公司還在利用一套服務端程式碼,幹完所有的事外,大部分應該都是多個應用的配合完成。而測試環境,不太可能利用多個伺服器提供服務。因此,使用docker進行測試環境搭建尤佳。建立多個docker進行多個伺服器模擬,也算是和線上環境保持一致了。
目前的主流技術得用上(當然關鍵還得看你的框架規劃),zookeeper, dubbo, redis, mongo, mq, …
3.3 只有開發環境搭建好了,才能讓後面的流程無憂。搭建的過程一定是,又搭建,又改程式碼,又排錯…
4. 進度的同步
4.1 及時向領導同步專案進度
對於一個新專案,有些地方行動緩慢是很正常的。而部分開發同學(比如我自己),就喜歡沉浸在自己的小世界裡糾結,走不出來,從而忘卻向領導彙報工作。而作為一個有點同理心的領導來說,他又不願意實時都來盯著你做事,因為也怕你遇到困難,想多給你點時間解決。
但是,這種情況,開發同學自己其實是要吃虧的,因為,給外人的感覺就是,你啥都沒做。所以,解決問題的同時,也不忘向領導彙報。
4.2 有處理不了的問題,及時向大牛們或者領導請教
獨立解決問題是好事,但是千萬別過了頭,實在解決不了,就要及時請教。否則,浪費的是時間。進步最快的方式,莫過於向比自己牛逼的人請教。知之為知之,不知為不知!
4.3 儘量將問題分攤下去
問題肯定是有的,而且會很多。千萬不要把所有的事情都壓在自己這兒,那樣自己會累死的,而且專案進度也會因此變得緩慢。要多利用小組成員的各自優點,適當多讓其搞點事情。
工作永遠都不是單一的一件事,肯定還會有其他的事情插入進來,觀察事情的重要性解決。如果能夠讓其他同學解決的,儘量讓其他同學處理,這點也得與領導同步。否則分心過於利害,受阻的只有專案進度,延期可不是自己一人的事情了。
需求也不可能一下就是完善的,在做的過程中,才可能發現一些潛在的問題,這時及時與需求方溝通,保持高效的狀態。當然,後期的跟進,也是儘量做到不要一人大包大攬,而是相應的人就去負責相應事情的跟進。其他人只要知道結果就行。
5. 功能模組的完成
5.1 說到具體的業務實現,個人覺得,已經不那麼難了。不過就是,先盡力提出的一個初稿,然後發現問題解決問題,發現問題,解決問題的過程。
5.2 各自系統能做的事情完成後,就是聯調各系統間的呼叫關係,保持高效的溝通,讓問題在短時間內解決,尤為重要。在這種時候,我覺得,一個小黑屋也許也是個不錯的選擇。
5.3 聯調的過程,其實就是一個自測的過程,應把儘可能多情況給考慮到位。
5.4 程式碼檢查,自己開發的程式碼,基本上很難發現其中的問題,即時找到相應人幫忙檢查程式碼,是比較好的解決程式碼問題的方案。其實,在給別人檢查的時候,也是自己檢查的時候,相當於自己再一次的開發,也能及時發現問題。
6. 多輪的測試驗證
6.1 測試同學,其實在開發快結束的時候,已經把測試用例給到大家。這也是另一個角度的開發,因此,參考測試用例進行相應開發修改也是很有必要的。
6.2 第一輪測試,可能主要是大功能的驗證,小功能的檢查,擋板環境即可,無需真實環境。
6.3 第二輪測試,則是要把之前的測試及各種配置,全部清空,以一個全新的專案來對待,重新進行相應環境搭建,程式碼部署,然後再進行測試,確保問題解決後,做好了相應的處理方案備份。這時,就需要用到真實的應用環境了。對之前一些暫未解決的問題進行重新測試。確保無問題。
6.4 第三輪測試,應該是一個灰度釋出的環境,也可以認為是預上線。將所有環境當作是線上來處理,如果執行ok,即可準備釋出上線了。
6.5 在測試過程中,因測試人員只是人工的處理,有時不一定能捕獲所有的問題,開發在這時,也應站在測試的角度,發現問題,即時監控,即時處理。
6.6 自動化測試,這個其實應該是靠後的處理,但是如果能做到這些的話,也能夠快速的重現問題。
6.7 壓力測試,應對線上環境,需有一定的能力評估,不然,只瞎猜,恐怕也不是好事。隨時準備橫向擴充套件,也只是出現問題後的解決方案。做好壓測,發現程式碼中存在的問題,即時處理掉。
7. 外圍處理(上線前)
7.1 上線前,肯定是有很多事務要處理的。
- 測試環境中的各種基礎資料,隨時匯出備份,到線上時,直接插入使用;
- 伺服器,在架構評審過程中進行數量評估;
- 域名,對外網提供服務一定是要域名的;
- 許可權,比如上線後,出現了問題,誰有許可權來處理問題,一定提前給到;
- 驗收,這是關鍵的一點,功能完成後,及時驗收,如果上線有些小問題,儘量協商,不要在線上頻繁改動