俗話說:不想當項目經理的程序員不是好的架構師。相信每一個有上進心的程序員,都有一個架構師的夢。最近完成了一個中小型的項目,讓我有了一些感受和想法,于是決定新開一個系列——《菜鳥要做架構師》。
經常看我博客的人應該了解,我寫了好幾個“菜鳥”系列了。有很多人問我,你都是大牛了,怎麼寫博客還叫菜鳥?有人覺得太過低調了,也有人覺得這是在裝B。其實呢,我是覺得自己真的還隻是個菜鳥。就光拿計算機行業來說吧,就有太多太多的知識我不懂,甚至連聽都沒聽過。記得高中有位老師說的話讓我印象特别深刻,大概意思是:越是一知半解的人,往往越是喜歡高談闊論;越是知識淵博的人,往往越覺得自己欠缺很多(哎呀,現在說這句話,有點裝B的嫌疑,罪過罪過....)。所以我覺得要保持一顆謙卑的心,才能夠不斷的學習并提高自己,所以用“菜鳥”二字來自勉。好了,好像扯的有點遠,下面咱們進入正題。
項目背景:
這個項目是給廊坊市政府做的,本來這個項目是别的公司做的,後來由于種種原因,不做了,留下一個半成品。我接手的時候,他們給了源碼和數據庫,還有一些簡單說明。幾乎沒有任何需求和設計文檔,經過多方聯系和溝通,他們給出的答複是:沒有文檔!最後經過大家讨論覺得在他們的基礎上繼續開發,成本較高(需要弄清楚他們的代碼以及數據庫,他們給的庫總共有四百多張表),所以最後決定重新開發。
上圖是最基本的骨架,當然還會用到一些工具類什麼的,那些可以統一放到tool裡面。大家都知道面向對象有幾個很重要的特性——抽象、封裝、繼承、多态。我們設計的時候當然也要遵循面向對象的思想,下面先來看一下每一層内部的聯系吧!
Action:Action這一層,抽象出一個BaseAction,由它統一繼承ActionSupport,然後把一些公共的東西封裝到裡面。例如分頁信息、result的返回值常量等等;
Service:Service這一層,抽象出一個BaseService,有它處理最基本的增删改查業務,其他具體的Service來繼承它,比如UserService,繼承BaseService以後,默認就具有了基本的增删改查,因此,它不需要再自己實現一遍。它的任務就是關注自己特有的業務,比如登錄、退出,這些是UserService自己獨有的業務。這樣不必管共有業務,隻關注自己特有業務的方式提高了代碼複用,提高了開發效率。
Dao:Dao這一層,抽象出一個BaseDao,它跟上面BaseService的作用很相似,負責處理對實體基本增删改查的工作,就不多說啦。
Entity:Entity這一層,其實也是可以抽象出一個BaseEntity的,可以讓它來實現序列化,這樣就不用每個實體類都實現一遍了。還可以把Id等公共屬性拿出來。總之,原則就是把大家都需要的統一放到一個地方,自己隻管自己特有的。
開發管理:
我們的開發團隊開始是四個人,後來一個開發人員轉到其他項目組,我們有轉過兩個人來。所以我們組屬于四五個人的規模,管理模式采用的是敏捷開發的模式。每天上午來了,九點開立會,每個人說一下昨天任務的完成情況,有沒有遇到什麼困難之類的。如果沒有什麼特殊情況,就給每個人分配一下接下來的任務,如果有人遇到什麼難題,就找人幫他解決一下,或者我幫他解決一下。然後把進度跟情況彙報給項目經理。
OK,上面說了那麼多項目的情況,下面該呼應一下本文的标題了,談談做完這個項目我的一些感受。好了,那麼問題來了:挖掘機技術... 咳咳... 不好意思,說順口了。今天要說的是快速開發中小型系統我們應該怎麼做。
快速确定需求
中小型系統通常業務不是很複雜,因此要确定需求并不難,快速畫出原型,積極和客戶溝通,以便快速的确定需求。需求不定後面的事情都是白扯。
合理的技術選型
需求定了,那麼接下來就要考慮怎麼做了。首先要确定用什麼技術,選擇什麼框架等等。技術選型首先要看這種技術适不适合項目,即能不能滿足我們的需求,通常這一點比較容易确定;第二就要考慮這種技術适不适合我們的團隊,什麼意思呢?就是說要看開發人員對于這項技術的熟悉程度,是不是能馬上上手,或者需要一段時間的學習,再或者需要投入比較高的學習成本。如果需要比較高的學習成本,那麼或許你該考慮一下是不是有其他的技術可以代替它。當然,如果你們項目不急或者你們公司是土豪那就另當别論了;再有不要一味追求最新的技術,因為新的版本往往伴随着新的bug,出了問題也不好解決,同樣也不要選擇太老的版本,推薦選擇比最新版本低一到兩個版本的正式穩定版。
優秀的基礎架構
什麼是優秀的代碼?很多人都知道:易擴展、易維護、複用性強.... 那麼如何做到這些呢?說實話,小弟水平一般說不太好,大抵可以概括如下:層之間加入接口,來降低耦合度、增加靈活性,方法與類的職責單一,提高内聚性,從而達到易擴展的目的;制定完善的代碼規範,模塊與關鍵代碼語句要有較詳細的注釋,完善的文檔,從而提高易維護性;抽象封裝公共模塊,提煉與業務無關的部分,如:分頁、樹形菜單、上傳、下載、基本的數據維護等。從而提高代碼的複用性。
項目管理
項目管理可以分為項目進度的掌控以及人員的管理安排。這兩者是密不可分的,隻有把人管好,才能讓項目平穩的向前推進。人與人之間的交往,遠比跟電腦打交道要複雜的多。這次輸入個“A”,他給你輸出個“B”,下次你同樣輸入個“A”,沒準他就給你輸出個“C”,或者給你輸出一堆亂碼,甚至直接死機藍屏了。這個事情三言兩語說不清,總之就是對待不同的人用不同的方法。對于踏實沉穩的人要時不時的鼓勵,換發他的激情;對于活潑外向的人就要偶爾打擊一下,安撫一下他的浮躁。任務的安排也要根據每個人的能力以及特長合理分配,當組員沒有很好的完成任務時也不要急于責備、質問,先耐心的傾聽,看看究竟是哪些原因所導緻的,然後客觀分析,找出解決方案,共同克服困難。
回頭一看,發現自己竟然寫了這麼多,說實話寫這篇博客着實花了我不少功夫,這應該是我寫的最長同時也是感受最多的一篇博客了吧。總之能夠順利的完成這個項目離不開大家的支持,離不開組員的努力,在此我就不一一感謝了。最後不得不單獨感謝一下巨同學,如果不是他一次次的鼓勵,不可能完成的這麼順利,遇到困難時彼此的鼓勵很重要。加油!你行的!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!