記得之前寫遊戲玩家類的時候,對於玩家資料的修改,我們總是提供這樣的介面。比如是對玩家金錢的修改。
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...