image source
本日開發延續之前的想法,發現越想越多,越想越難下手~這可能也是選擇障礙的一種!
今天我試著把許多地方改變了許多,來看看before after吧。
原本的做法
- 目前會員登入的流程都是在view裡面,包括檢查是否已經是會員,檢查密碼是不是正確的,再送Json給前端看這個人到底有沒有登入成功。寫起來大概會長這樣。
現在看可能有些人已經受不了了,什麼哩哩叩叩的東西都摻雜在一起!?def 會員登入頁面(request): if request.method == "GET": ctx = {} return render(request, "會員登入.html", ctx) if request.method == "POST": data = {} 會員帳號 = request.POST.get("會員帳號", "") 會員密碼 = request.POST.get("會員密碼", "") 會員_query_set = 會員資料表.objects.filter(會員帳號欄位=會員帳號) if list(會員_query_set) == []: data['message'] = "噗噗!!你還沒有註冊!" return JsonResponse(data) if check_password(會員_query_set.會員密碼, 會員密碼): data['message'] = "密碼正確通過" return JsonResponse(data) else: data['message'] = "噗噗!!密碼錯誤" return JsonResponse(data)
改版後的做法
- 改版後大概會像是把所有東西都打包起來,把view清乾淨。
def 會員登入頁面(request):
if request.method == "GET":
ctx = {}
return render(request, "會員登入.html", ctx)
if request.method == "POST":
data = {}
會員帳號 = request.POST.get("會員帳號", "")
會員密碼 = request.POST.get("會員密碼", "")
member = 會員()
if member.login(會員帳號, 會員密碼):
data['message'] = "密碼正確!!"
else:
data['message'] = "噗噗!!帳號密碼有誤~"
return JsonResponse(data)
這樣子感覺起來好像好一點了,至少變的比較好讀了。
於是呢,我就改改改,之前幾乎都沒有包成物件的地方都調整了許多,也盡量找出符合他們的method,類似:member.login(), member.register(), member.create_case()等等等…..,盡量找出是屬於這個物件的行為,也剛好之前有試著做OOA,所以大部分都只是抓漏,把以前程式碼符合行為的地方抓出來包,包著包著view就越來越輕便了,可喜可賀,可口可樂。
不過,後面又有衍生的問題產生了,我每一個物件的方法隨著我抓漏的過程中越來越多,然而我目前也都沒有使用到繼承也還沒有感覺到可以使用的點,讓我有點不明白這樣的方面究竟是對的還是錯的呢??
最後希望明天的我可以幫現在的我解決這些問題!!
其實還有一個地方也滿讓我兩難的,就是member.login()這個做法是好的嗎?還是其實會需要有一個Service物件來讓member可以登入呢?
問了ChatGPT給我的回應是(由於那個對話被我刪掉了只能憑印象):
以上兩個做法都是很好的開發方式,可以根據你的情境或需求做選擇。
但我還是懷疑了他,真的是這樣嗎!?