第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更新服務(wù)器內(nèi)存中的對象與從數(shù)據(jù)庫拉取更新的對象

更新服務(wù)器內(nèi)存中的對象與從數(shù)據(jù)庫拉取更新的對象

蝴蝶刀刀 2022-09-29 10:42:25
我有一個架構(gòu)/最佳實踐問題我有一個小物體,像這樣userObjectFactory(data) {  const {    id,    lastActive,  } = data;  return Object.freeze({    id,    lastActive,  });}現(xiàn)在我必須在內(nèi)存中更新它的方法。我可以使用更新的值重新創(chuàng)建對象,如下所示if(saveToDb().passed === true) {  const newUser = userObjectFactory(newData)}或者,我可以保存到數(shù)據(jù)庫,然后拉取更新的對象??雌饋磉@兩種方法都將使用相同數(shù)量的代碼,但第二種方法將從數(shù)據(jù)庫中再拉取一個代碼,這可能會加起來。這里最好的解決方案是什么?第二個問題是,如果我堅持使用第一個選項,那么使用工廠重新創(chuàng)建對象會更好嗎?還是添加方法來更改屬性?我對不變性原則有點困惑
查看完整描述

1 回答

?
慕標5832272

TA貢獻1966條經(jīng)驗 獲得超4個贊

首先,如果您可以避免寫入數(shù)據(jù)庫,請絕對選擇。

然后,如果我們有一些關(guān)于你試圖保護的內(nèi)容的上下文,我們可以更好地回答 - 無論是你自己的代碼中的意外更改,還是你把這個對象交給其他你無法控制的外部代碼?

如果它只是你的代碼,那么你可能過度思考了事情,試圖使整個對象不可變,而你實際上不希望對象中的所有內(nèi)容都是不可變的。某些對象是可以更改的活動狀態(tài)。

在這種情況下,我將使用并設(shè)置實際的不可變屬性,并將可變屬性保留為可以直接寫入和更改的內(nèi)容。當您實際打算更改某些屬性時,您沒有對整個對象描述任何原因。Object.defineProperty(){writable: false, configurable: false}Object.freeze()

如果您要將對象傳遞給外部代碼,并且您不希望它們能夠更改您的實際核心對象,那么只需向它們傳遞該對象的副本,而不是原始對象。然后,無論他們對它做了什么,它都不會以任何方式影響你的代碼。然后,您不會嘗試管理某種混合對象,這些混合對象對某些代碼是不可變的,但對某些代碼是可變的,這只是一些混亂。

第二個問題是,如果我堅持使用第一個選項,那么使用工廠重新創(chuàng)建對象會更好嗎?還是添加方法來更改屬性?我對不變性原則有點困惑。

目前還不清楚你試圖通過這里的不變性原則實現(xiàn)什么。這聽起來像是你正試圖遵循某種設(shè)計原則,讓事情盡可能地不可變。當然有一些地方可以做到這一點,但就像任何設(shè)計原則一樣,它們應(yīng)該在有意義的時候應(yīng)用,而不是在沒有意義的時候應(yīng)用。如果該對象中具有實際的可變狀態(tài),則可能不希望將該狀態(tài)放在不可變的對象中。因此,要么將可變狀態(tài)存儲在其他位置,要么不要假裝可變對象是不可變的(當它不是時)。就像你有一個包含 10,000 個項目的數(shù)組,并且希望更新數(shù)組中的一個項目一樣,你不會使數(shù)組不可變,然后必須創(chuàng)建數(shù)組的全新副本,這樣你就可以修改數(shù)組中的一個項目。不,您可以改變現(xiàn)有數(shù)組并直接更改一個元素。它的效率要高出一噸。


查看完整回答
反對 回復(fù) 2022-09-29
  • 1 回答
  • 0 關(guān)注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號