個人作業——軟件工程實踐總結&個人技術博客
作業描述
這個作業屬於哪個課程 | 2021春|S班 |
---|---|
這個作業要求在哪里 | 軟件實踐寒假作業 |
這個作業的目標 | 課程回顧與總結,個人技術總結 |
其他參考文獻 |
一. 課程回顧總結
問題回顧
對於之前的問題一,關於創新時機的問題,在這次的課程實踐中我並沒有得到什么夠好的答案。我想這可能主要是課程實踐一部分是命題類的實踐作業,一部分的作業則是沒有真正的拿出去創業和時間。再加上團隊制作的軟件是屬於比較常見的日用記賬類型,沒有出現什么創新。
問題2:關於核心功能和產品的關系。對於這一點我在這次團隊軟工實踐深有體會。我們制作記賬軟件的時候,有時因為要實現一些小功能而搞得焦頭爛額,(例如記賬按鈕設置為可以滑動的懸浮球)。后續分析后認為沒有太大必要,不如多花花心思在賬單列表的展示這一方面。畢竟用戶使用的主要還是這些核心功能。
問題3:團隊合作的隊員能力不匹配的問題。我覺得這個問題從結對作業到團隊合作有了一些變化,過於我疑惑於爭吵最后會變成“然后如果兩個對於一個問題起了爭執變成了誰嗓門大誰說了算該怎么辦。”,在團隊合作的時候,因為隊員多,總歸是大部分同學是處於理性的。至於能力不匹配的問題,在團隊項目的分工實在很多,有的隊員不擅長於編寫代碼,學習的內容較小,他們往往會主動承擔其他責任,例如去撰寫博客,或者搜集資料,總結經驗。我認為這類工作也是十分有必要的。
問題4: 我的理解依然沒有改變。我認為精通一項技能也足以成為大師。
問題5: 關於團隊合作的鸚鵡。關於這個事情,我實話實說的是我確實有在團隊實踐里遇到渾水摸魚得人,但是好在他並沒有提出五花八門的想法,也沒有去影響到團隊的進度,這點我覺得實在是很幸運。
知識點總結
軟工實踐時往往會經歷許多階段,在需求分析階段的時候,我認為最大的收獲是如果跟隊員溝通表達自己對產品的理解,並且跟隊員一同進行調研。
在設計實現測試的時候,最大的收獲其實就是學會了如果使用微信小程序進行開發。
最后發布的時候,收獲倒是挺豐富的。微信小程序的發布非常麻煩,凡是涉及到用戶UGC的,都需要小程序的主體為企業或個體工商戶,並且還要進行icp備案。最終發布時還要對用戶發布內容進行安全性過濾,並且經過7天的管局審核,才能正式通過並發布。一套流程下來正常在一個月左右。
課程心得
軟工實踐確實是一門快速提升同學開發能力的課程,但是課程開課時間的安排 以及課程內容的時間安排並不太讓我感到舒服。我認為這門課最合適的時候是安排在大三上學習,這樣到了大三下同學們就可以用學到的技術去參加公司面試,或者專心准備考研。
團隊合作的時候總會有混子,但是如果大家做好自己的事,是能將混子對項目進度的影響降到最低的。因此與其花很多時間去跟混子爭吵,不如做好手上的工作。
個人的體會是可以減少一些比較沒啥意義的作業(例如軟件測評、各種報告的書寫)的占比,像團隊github實踐類的作業可以適當改變,我認為這個作業對團隊氛圍的培養是十分有用的。
最后的最后是 大家一定要誠信學習,公平競爭
二.個人技術總結
在團隊開發的時候,我使用的較多的主要就是微信小程序的前端api,因為我們在這一部分的開發是比較基礎的,遇到的問題一部分是在軟件的生命周期方面,還有一部分比較困難的是微信小程序在調用雲函數的同步異步這一類問題。
技術概述:
在團隊實踐開發時,我們選擇使用微信小程序來進行開發。為了方便后端處理數據,我們選擇了微信小程序官方自帶的雲數據庫,這是一個比較簡單的數據庫,對數據庫的操作則是通過微信的雲函數調用來進行的。
微信雲開發是微信團隊聯合騰訊雲推出的專業的小程序開發服務。
開發者可以使用雲開發快速開發小程序、小游戲、公眾號網頁等,並且原生打通微信開放能力。
開發者無需搭建服務器,可免鑒權直接使用平台提供的 API 進行業務開發。雲函數是一段運行在雲端的代碼,無需管理服務器,在開發工具內編寫、一鍵上傳部署即可運行后端代碼。
小程序內提供了專門用於雲函數調用的 API。開發者可以在雲函數內使用
wx-server-sdk
提供的getWXContext
方法獲取到每次調用的上下文(appid
、openid
等),無需維護復雜的鑒權機制,即可獲取天然可信任的用戶登錄態(openid
)。
定義雲函數的方式
const cloud = require('wx-server-sdk')
exports.main = async (event, context) => {
let { userInfo, a, b} = event
let { OPENID, APPID } = cloud.getWXContext() // 這里獲取到的 openId 和 appId 是可信的
let sum = a + b
return {
OPENID,
APPID,
sum
}
}
在開發者工具中上傳部署雲函數后,我們在小程序中可以這么調用:
wx.cloud.callFunction({
// 需調用的雲函數名
name: 'add',
// 傳給雲函數的參數
data: {
a: 12,
b: 19,
},
// 成功回調
complete: console.log
})
// 當然 promise 方式也是支持的
wx.cloud.callFunction({
name: 'add',
data: {
a: 12,
b: 19
}
}).then(console.log)
產生問題的主要原因是 微信小程序中大部分的API請求都是異步的。也就是說他們執行的順序並不固定。因此會發生當我想要調用雲函數設置數據,然后再調用另一個雲函數獲取數據來設置頁面參數的時候,會發生失效的情況。這在當時對我造成了極大的困難。
解決的方法有兩種
第一種方式:回調函數執行,后一個方法寫到前一個的回調函數中從而實現順序執行
第二種方式:async-await 同步執行,此方法等待前面方法執行完畢才繼續后續執行
async function checkString(content) {
// try {
// var res = await wx.cloud.callFunction({
// name: 'checkString',
// data: {
// content: content,
// }
// });
// if (res.result.errCode == 0)
// return true;
// return false;
// } catch (err) {
// console.log(err);
// return false;
// }
// }
// pubcom: async function (e) {
// wx.showLoading({
// title: '加載中',
// mask: true
// })
// var that = this
// var doc_id = that.data.commentID
// var content = that.data.comcon
// var formId = e.detail.formId;
// if (!content) {
// return
// }
// var isCheck = await common.checkString(content);
// if (!isCheck) {
// wx.showToast({
// title: '含有敏感詞',
// image: "/assets/icon/icon-warning.png",
// });
// return
// }
//后續代碼
對該問題總結:使用第二種方法相對來講會比較麻煩。現在的微信小程序的客戶端目前是完全支持Promise的,並不直接支持async await,如果想用async await,還需要npm 依賴,分離js文件 ,require調用。對初學者並不友好。
使用第一種方法相對簡單,在回調函數里直接嵌套就行。但是如果嵌套過多,代碼可讀性就不高。
參考的博客