回覆列表
  • 1 # 手機使用者82469142949

    重寫 save 方法 (不建議透過signal機制來做)

    從而使得呼叫方只關心 A 欄位, B欄位根據A欄位在儲存的時候自動賦值.

    @ramwin

    為什麼不建議透過signal機制來做

    舉例子,假如你要讓馬路這邊的老奶奶走到那邊去。有兩種方法,

    Signal 是發出訊號,相當於你是紅綠燈, 綠燈亮了。具體老奶奶走不走,什麼時候走,看情況。直接呼叫函式,相當於你幫著老奶奶過馬路。呼叫函式,save 錯了,這個記錄就沒有,呼叫方是對呼叫結果負責的。我幫老奶奶扶馬路扶摔倒了是要送醫院的。傳送訊號,則老奶奶需要自己對自己的身體負責,拋了異常,和我一個紅綠亮了沒什麼關係

    Signal 一般用於釋出訊息,比如,你存一個文件,這個文件還需要同步到 ES/MONGODB, 或者需要打個日誌。這個時候,就有多個 reciever 接收到這個訊號。作為 Sender 呼叫方,類似於亮綠燈。接收到訊號之後:

    1. Reciever 1 說,我來打日誌2. Reciever 2 說,我來同步 ES3. Reciever 3 說,我來同步 MongoDB4. Reciever 4 說,我來扶老奶奶過馬路

    顯然,這個場景下,使用訊號機制並沒有起到解耦的作用,反而分散程式碼邏輯到不同的地方。閱讀程式碼的體驗還下降了。

    當然, 由於 django 的 signal 是同步的, 這個場景下你用他來做也沒問題....只是分散程式碼邏輯到不同的地方。閱讀程式碼的體驗還下降了。

  • 中秋節和大豐收的關聯?
  • 比英國早200年實現了“日不落”,西班牙是如何崛起的?