編碼過程中,一點點兒需要注意的地方

2021-09-23 21:52:04 字數 1060 閱讀 5795

記得之前寫遊戲玩家類的時候,對於玩家資料的修改,我們總是提供這樣的介面。比如是對玩家金錢的修改。

public player

public void deductmoney(int money)

public int getmoney()

}

而避免提供這樣的介面

public player

public int getmoney()

}

後者,我們每次操作玩家金錢的時候,總是需要先getmoney,然後再新增或者刪除,最後再呼叫setmoney方法。這樣方式,有兩個比較大的缺點。1:操作繁瑣。 2:如果是多執行緒,將無法控制,在getmonet 和 setmoney,之間如果其他執行緒操作玩家money,那麼將要出現資料不一致的情況。 而前者避免了這兩種情況。但是沒有想到這個典型的錯誤,在應用**中也是經常出現。於是就發現了下面的問題。

最近在工程中發現了n多這樣的**!

int money = ***;

member.setmoney(member.getmoney() + money);

這個問題和上面的提供set get的方式一樣。不過資料放到了資料庫中而已。

問題除了那兩個問題,還多了乙個。

第一:操作繁瑣,每次都是先從資料庫select,然後再去計算新的值,最後再去資料庫update。

第二:資料庫不一致,如果在select和update之間,其他執行緒操作這個玩家的money,那麼肯定會出現不一直的情況。

第三:兩次資料庫的操作,慢,卡!

所以正確的寫法應該是:

int memberid = ***x;

int money = ***x;

addmembermoney實現:

update set membermoney = membermoney + money where id = memberid;

這裡雖說多提供了sql語句,但是於邏輯,於資料一致性方面,都有了很大的提公升。

學校寫的一點點兒簡單的編碼約定

4.5編碼規則 4.5.1命名約定 a 原則 簡單就是效率 b 專案名 derongauctiononline c 資料庫 oracle10gxe,資料庫中均用英文本母且大寫 d 表名 用實體的名字,且寫成 t 實體名 e 字段 均用 表名 id 作為主鍵,用uuid的方式生成32位的字串 其他欄位...

學校寫的一點點兒簡單的編碼約定

4.5編碼規則 4.5.1命名約定 a 原則 簡單就是效率 b 專案名 derongauctiononline c 資料庫 oracle10gxe,資料庫中均用英文本母且大寫 d 表名 用實體的名字,且寫成 t 實體名 e 字段 均用 表名 id 作為主鍵,用uuid的方式生成32位的字串 其他欄位...

QML一點點注意的地方

1 id需要小寫 2 模組名首字母要大寫 3 由原來的import qt 4.7 修改為了import qtquick 1.0 4 states是 5 國際化用 qstr 6 匯入js檔案用 import js as name 7 屬性的設定宣告方法 property int len 12,別名 p...