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給我的回應是(由於那個對話被我刪掉了只能憑印象):

以上兩個做法都是很好的開發方式,可以根據你的情境或需求做選擇。

但我還是懷疑了他,真的是這樣嗎!?