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

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

你將如何持久化一個實現(xiàn)狀態(tài)設(shè)計模式的對象?

你將如何持久化一個實現(xiàn)狀態(tài)設(shè)計模式的對象?

紅糖糍粑 2021-06-17 18:19:11
我目前正在制作一個快遞服務(wù)網(wǎng)頁 - 客戶可以放棄訂單 - 快遞可以更改訂單的狀態(tài)(新的,接受的,交付中的,交付的,取消的)。我使用狀態(tài)設(shè)計模式來描述這一點,因為它對我來說最有意義。我想將所有訂單保存在關(guān)系數(shù)據(jù)庫中(我使用的是 H2 和 Hibernate/JPA) - 但我不知道如何在加載對象時恢復(fù)狀態(tài)。想到了兩種方法:為每個狀態(tài)創(chuàng)建一個表,并將對象保存在與其狀態(tài)對應(yīng)的表中(我不知道如何(如果可能的話)實現(xiàn)這一點)。給訂單類一個與其所處狀態(tài)相對應(yīng)的屬性 - 然后在再次加載對象時將對象的內(nèi)部狀態(tài)設(shè)置為等于相關(guān)狀態(tài)。但這不會破壞狀態(tài)設(shè)計模式的目的嗎?目標(biāo)不是最小化 if/else 語句和開關(guān)墻嗎?我應(yīng)該怎么辦?有沒有更好的方法來解決這個問題?
查看完整描述

3 回答

?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗 獲得超7個贊

這在很大程度上取決于您的用例。

您是否計劃擁有數(shù)以百萬計的行?那么每個州都有一張桌子實際上是有道理的。這稱為分區(qū),通常,您的應(yīng)用程序不會知道您有一組表。但是你的數(shù)據(jù)庫會。我認(rèn)為情況并非如此。

第二個選擇是聲音,如果它是一個玩具項目。狀態(tài)設(shè)計模式的目標(biāo)不是減少 if/else 語句的數(shù)量。根據(jù)我的經(jīng)驗,它通常會產(chǎn)生更多的 if/else 語句。目標(biāo)是封裝狀態(tài)轉(zhuǎn)換。也就是說,在代碼周圍使用 if/else,很容易將您的訂單從 Created 狀態(tài)移動到 Completed 狀態(tài),而實際上它沒有被處理。狀態(tài)設(shè)計模式有助于解決這個問題。

但實際上還有第三種選擇,通常用于現(xiàn)實生活中的系統(tǒng)。有 OrderStates 表,它將保存訂單所在的所有狀態(tài)。每次訂單在狀態(tài)之間移動時創(chuàng)建一行。這將使您能夠真正了解系統(tǒng)中發(fā)生的情況。


查看完整回答
反對 回復(fù) 2021-06-30
  • 3 回答
  • 0 關(guān)注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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