畢設題目
軟體工程專業,學校給的畢設題目是實現一個電影院訂票系統,如圖。

技術方案選擇
先說個大前提:我們學校評比優秀畢業生的硬性條件之一是畢設必須拿到良以上。
從題目分析來看其實語言的選擇上來看是要使用JSP或者.net技術,但是作為一個迫切想要拿到優秀畢業生的人來說【其實想裝xヾ(≧O≦)〃嗷~】,自然不能使用這些比較古老的技術了,雖然我自身是一個Java系的支持者,但是為了最後在畢設答辯的時候可以在技術相關的選擇上給評委一種眼前一亮的感覺,最終我選定了以下的技術方案。 技術方案:
- 服務端:go-micro【微服務框架】
- 資料庫:mysql
- 緩 存:redis
- 前 端:el & vue
- 伺服器: centos 7 & nginx
- 本地環境:go1.9
- 容器:Docker
- 程式管理:supervisor
- 資料庫備份:冷備份(rsync+mysqldump)
當然了,這裡如果是對某種技術沒那麼熟悉的話還是不建議選擇較新技術的,畢竟這是畢設。哦,這裡要說一點,去年我們那一屆,對於docker容器技術、程式管理、redis快取和go語言和微服務這種概念有相關了解和應用的還是比較少的,大多是使用Java的三大框架,我個人是因為本身在學校便有不錯的技術基礎,並且算是熟悉這幾個技術的搭配使用,所以才敢鋌而走險,當然了,最終的結果也證明了我的選擇是對的。
搭建基礎框架
技術方案選型好了,那麼接下來就是先搭好基礎框架了,搭建基礎框架相當於打地基,地基打好了後面寫業務就相當於添磚加瓦了,簡單分為以下幾步:
- golang語言環境搭建
- docker環境搭建
- go-mirco專案基礎結構搭建,包括資料庫、redis等
- 模組劃分
- 服務劃分
- 各種指令碼儲備
前面幾種環境的搭建大家可以自行谷歌百度,一搜一大把的那種,此處便不多描述了。關於模組劃分,當年的我【嗯,現在老了(;´༎ຶД༎ຶ`)】是這樣劃分的

關於模組劃分這一點,一定要注意的是劃分完一定要對照下畢設需求,大部分畢設上都有寫需要實現的功能有哪些,因此如果少了就翻車了,到時候會被評委屌飛︿( ̄︶ ̄)︿,寧可做多不可做少。 之後便是做服務劃分了,最終劃分結果如下

這裡的劃分思想我是基於平常做專案的時候劃分controller的思想進行劃分的,說實話,草根思想哈哈哈,不過在大學算是做了比較多的專案,也拿了比較多的獎項,所以對於這種劃分的話算是還是有一定的實操依據。 最後各種指令碼儲備指的是

實現業務
基礎框架搭建好了,接下來其實就是實現具體程式碼的時候了,業務上的具體實現便不細說了,大體流程是這樣的,先定義介面,然後補充介面,服務端的大致流程跑通後,我再搭建前端,並且實現前端業務,再進行聯調,一邊聯調一邊修改介面。 最終實現出來的效果如下【大型介面翻車現場w(゚Д゚)w】:



上雲
最終為了給評委更加直觀的感受,可以直接通過域名開啟,我將前端後端程式碼都放到了我的騰訊雲伺服器上,這裡使用docker容器技術的好處就體現出來了,我直接將程式碼提交到github上,然後再騰訊雲伺服器的ubuntu系統上直接clone下來,並且直接使用shell指令碼打包釋出部署,一鍵搞定,如果不使用docker的話,還要自己在ubuntu系統上重新搭建一份新的和本地一樣的環境,你還要求神拜佛不要出現依賴衝突或者其他亂七八糟的問題,不然你還要在上雲這一步花費不少的精力。 額,剛剛說了一鍵搞定,不是一行程式碼哈,我找了下我github上的README上寫的,是這樣的

答辯結果
做了那麼多裝x的操作,目的就是為了那個優秀畢業生,我容易嗎我??? 好在最後結果還在沒有翻車,評委老師確實被我這些裝x的操作折服了,賞了我一個優秀畢業生。
超重點來了 其實大部分人都沒有好好看待學校的畢設,大部分人都是在答辯前一兩個星期才匆匆忙忙搞,馬馬虎虎應付,不關技術好壞,只是看不起畢設或者懶,因此自然很難做到全面,而我的認真算是被評委老師們看出來了,因此才給了優的評分,最後順其自然拿到了優秀畢業生。撒花撒花!!!
最後的最後
標題那麼裝x是怎麼回事呢?其實就是我從一開始做畢設開始,就開源了,地址: github.com/wiatingpub/…
可能是因此使用了微服務技術,或者是docker,或者是畢設讓大家覺得馬馬虎虎還過得去,因此斷斷續續有人star和fork,截止到當前為止,已經126個star和39個fork了。 在眾多大神面前班門弄斧,確實在過分了,輕噴輕噴哈,溜了溜了!!!
小弟不才,留個公眾號哈,主要寫Java相關、go語言應用、微服務相關的文章,有興趣交個朋友交流校園趣事或者學點東西的可以關注下:
