一份從 0 到 1 的 Java 項目實踐清單

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

看了一篇文章,感覺還可以,就給大家共享一下:

對于著手一個項目的時候,要從以下入手(即項目清單):

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 上線前,肯定是有很多事務要處理的。

  • 測試環境中的各種基礎數據,隨時導出備份,到線上時,直接插入使用;

  • 服務器,在架構評審過程中進行數量評估;

  • 域名,對外網提供服務一定是要域名的;

  • 權限,比如上線后,出現了問題,誰有權限來處理問題,一定提前給到;

  • 驗收,這是關鍵的一點,功能完成后,及時驗收,如果上線有些小問題,盡量協商,不要在線上頻繁改動。

如此!整個項目就完工了。

其實發現,一個項目真正的功能實現,并沒有占多大的比例,而是一些前期的準備及后續的處理,反而占了更多的時間。

第一個版本上線后,可能接著就是迅速迭代了。(如果運營還可以的話!)

以上,就是一整個項目的流程清單,以一步一個腳印的經歷總結,不涉及具體語言代碼,但是思路都是相通的,希望對你有幫助!

轉載于:https://my.oschina.net/u/3315736/blog/1593637

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453308.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453308.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JWT 簡介

JWT是一種用于雙方之間傳遞安全信息的簡潔的、URL安全的表述性聲明規范。JWT作為一個開放的標準(RFC 7519),定義了一種簡潔的,自包含的方法用于通信雙方之間以Json對象的形式安全的傳遞信息。因為數字簽名的存在,這些信…

FFMPEG的詳細資料可以在它的官方網站上找到

請看官網的文檔欄目: http://ffmpeg.mplayerhq.hu/documentation.html FFmpeg System Documentation Frequently Asked QuestionsFFmpeg program documentationffserver documentationffplay documentationvideo hook documentationsample ffserver configuration fileFFmpeg A…

空指針入棧問題

空指針和數據元素一樣能夠進棧。并且如果棧原來為空,壓入空指針后棧就不會為空了。空指針一旦被賦予指針,如果是在32位機上則占四個字節。只不過是沒有指向堆內存中的任何數據。而空指針已經壓進棧了,不加以釋放就一直存在。

arm linux 中斷 分析,armlinux中斷異常的處理分析.pdf

基于 ARM Linux 中斷、異常的處理分析本文是基于ARM S3C2410X 系統的Linux 2.6 中斷、異常和系統調用的處理分析。主要有以下幾個部分:1. ARM 的硬件中斷機制2. Linux 2.6 對 ARM 中斷向量表的初始化3. Linux 2.6 對 ARM 中斷、異常的處理(從匯編-->C 語言函數&a…

(數據科學學習手札03)Python與R在隨機數生成上的異同

隨機數的使用是很多算法的關鍵步驟,例如蒙特卡洛法、遺傳算法中的輪盤賭法的過程,因此對于任意一種語言,掌握其各類型隨機數生成的方法至關重要,Python與R在隨機數底層生成上都依靠梅森旋轉(twister)來生成…

音視頻編解碼知識學習詳解(分多部分進行詳細分析)

1. 常用的基本知識 基本概念 編解碼 編解碼器(codec)指的是一個能夠對一個信號或者一個數據流進行變換的設備或者程序。這里指的變換既包括將信號或者數據流進行編碼(通常是為了傳輸、存儲或者加密)或者提取得到一個編碼流的操作…

二叉樹非遞歸后序遍歷算法

與正常的非遞歸中序遍歷算法不同于兩點: 一 比正常的中序遍歷算法多了對數據元素的標記。 在壓數據元素入棧(標記記為0,用來表示訪問了其左子樹)時標記, 還有訪問完左子樹利用gettop()獲取雙親…

SQL*Plus命令

SQL*Plus命令 前言 一:SQL*Plus 與數據庫的交互 二:設置SQL* Plus的運行環境 二 - 1 :SET命令概述 二 - 2 :使用SET命令設置運行環境 二 - 2 ____1:Pagesize 變量 1 SYSorcl> show pagesize2 pages…

redis-day1

1 Redis 概述 REmote DIctionary Server(Redis)是一個基于key-value鍵值對的持久化數據庫存儲系統。redis和大名鼎鼎的Memcached緩存服務軟件很像,但是Redis支持的數據存儲類型比Memcached更豐富,包括strings(字符串)、lists&…

C語言數碼管是共陰共陽程序,C語言實現共陰極數碼管操作

共陰極或者共陽極數碼管,因為其需要電流大,而一般51輸出電流低,需要鎖存器。買的開發板使用的共陰極數碼管。至于其構造,找個相關方面的書看看,這里主要是對做好的電路板進行編程。剛開始的時候,感覺在數碼…

數據庫主要特點

(1)實現數據共享。數據共享包含所有用戶可同時存取數據庫中的數據,也包括用戶可以用各種方式通過接口使用數據庫,并提供數據共享。 (2)減少數據的冗余度。同文件系統相比,由于數據庫實現了數據共享,從而避免了用戶各自建立應用文…

百度與華為全面戰略合作 人工智能手機真的要來了

視頻加載中...12月21日百度和華為在北京宣布達成全面戰略合作。這次合作內容主要包括三點,首先是在語音、語義、視覺和VR上的自然交互,這是百度為華為手機AI賦能的基礎層。第二是基于華為HiAI平臺和百度PaddlePaddle深度學習框架,共建人工智能…

JavaScript數據類型

一、JavaScript數據類型主要分為原始類型和引用數據類型。 原始類型包括(不可拆分的東西):Number、String、Boolean、Null、Undefined。引用數據類型包括:Object(Array,Date,RegExp,Function)ty…

funcode拼圖游戲c語言程序,同求funcode平臺下拼圖游戲的C語言代碼

做了好幾天,寫了好多回就是不對,徹底崩潰。。#include "CommonAPI.h"//#include "LessonX.h"#include#define BLOCK_COUNT 4int g_iGameState;intg_iBlockState[BLOCK_COUNT][BLOCK_COUNT];charg_szBlockName[BLOCK_COUNT*BLOCK_COU…

什么是透明傳輸

透明傳輸是指不管所傳數據是什么樣的比特組合,都應當能夠在鏈路上傳送。當所傳數據中的比特組合恰巧與某一個控制信息完全一樣時,就必須采取適當的措施,使收方不會將這樣的數據誤認為是某種控制信息。這樣才能保證數據鏈路層的傳輸是透明的。…

Android 秒級編譯FreeLine

項目地址:FreeLine FreeLine官網: FreeLine 1. 安裝FreeLine插件 File->Settings->Plugins, 搜索輸入FreeLine Plugin, 查找到后進行安裝并重啟Android Studio。 圖1.png安裝好之后,在工具欄就會出一個圖標 圖2.png2. 配置gradle 根目錄build.gr…

JS實現大整數乘法(性能優化、正負整數)

本方法的思路為: 一:檢查了輸入的合法性(非空,無非法字符) 二:檢查輸入是否可以進行簡單計算(一個數為 0,1,1,-1) 三:去掉輸入最前面可…

c語言中- gt he,C語言中deta,fabs,lt;stdlib.hgt;,lt;stdio.hgt;分別是什么意思

fabs 編輯本段C語言數學函數:fabs 函數簡介  原型:在TC中原型是extern float fabs(float x);,在VC6.0中原型是double fabs( double x );。   用法:#include   功能:求浮點數x的絕對值   說明:計算|x|, 當x不為…

物理層

目的: 物理層要盡可能地屏蔽掉物理設備和傳輸媒體,通信手段的不同,使數據鏈路層感覺不到這些差異,只考慮完成本層的協議和服務。 給其服務用戶(數據鏈路層)在一條物理的傳輸媒體上傳送和接收比特流…

C語言中的二級指針(雙指針)

二級指針又叫雙指針。C語言中不存在引用,所以當你試圖改變一個指針的值的時候必須使用二級指針。C中可以使用引用類型來實現。 下面講解C中的二級指針的使用方法。 例如我們使用指針來交換兩個整型變量的值。 錯誤代碼如下: 一級指針 [cpp] view pla…