實戰(zhàn)篇:基于SSM的秒殺系統(tǒng)之Service層搭建

????????老規(guī)矩,文末給出代碼下載地址张遭,如果你沒有查看先前的文章請先查看這個系列的前幾篇【畢竟前邊的是基礎】
????????實戰(zhàn)篇:基于SSM的秒殺系統(tǒng)之項目介紹
????????實戰(zhàn)篇:基于SSM的秒殺系統(tǒng)之項目搭建和數(shù)據(jù)庫設計
????????實戰(zhàn)篇:基于SSM的秒殺系統(tǒng)之DAO層搭建
????????通過上一篇的介紹莽龟,我們主要介紹了數(shù)據(jù)庫的相關操作蠕嫁,并沒有涉及到相關的業(yè)務邏輯操作,可以看出毯盈,在MVC模型當中剃毒,分層觀念是很重要的,雖然不可能做到完全的分離搂赋,但是最大限度地分開可以降低耦合度赘阀,使代碼更加清晰,今天Service層主要來介紹與業(yè)務邏輯相關的操作脑奠。

Service接口的設計

????????Service接口的設計基公,一定要站在“使用者”的角度來看,不要以一個程序員的角度來看待這個問題宋欺,要考慮到實際的用戶的習慣轰豆,本著這個原則,這個系統(tǒng)的Service接口這樣進行設計

public interface SeckillService {
    /**
     * 查詢所有秒殺記錄
     * 
     */
    List<Seckill> getSeckillList();

    /**
     * 查詢單個秒殺記錄
     */
    Seckill getById(long seckillId);

    /**
     * 秒殺開啟時輸出秒殺接口地址齿诞,否則輸出系統(tǒng)時間和秒殺時間
     */
    Exposer exportSeckillUrl(long seckillId);

    /**
     * 執(zhí)行秒殺操作
     */
    SeckillExecution executeSeckill(long seckillId, long userPhone, String md5)
            throws SeckillException, RepeatKillException, SeckillCloseException;
}

????????簡單介紹一下這個接口酸休,其中“輸出秒殺接口”的方法是為了防止用戶惡意拼接地址而提前進行購買,executeSeckill則是整個秒殺活動的入口

DTO設計

????????DTO是個什么東西呢祷杈?

DTO :

????????Data Transfer Object數(shù)據(jù)傳輸對象
????????主要用于遠程調用等需要大量傳輸對象的地方雨席。
????????比如我們一張表有100個字段,那么對應的PO就有100個屬性吠式。
????????但是我們界面上只要顯示10個字段陡厘,
????????客戶端用WEB service來獲取數(shù)據(jù),沒有必要把整個PO對象傳遞到客戶端特占,
????????這時我們就可以用只有這10個屬性的DTO來傳遞結果到客戶端糙置,這樣也不會暴露服務端表結構。
我們使用到的DTO有

Exposer暴露秒殺接口
// 是否開啟秒殺
private boolean exposed;
// 一種加密措施
private String md5;
// id
private long seckillId;
// 系統(tǒng)當前時間(毫秒)
private long now;
// 開啟時間
private long start;
// 結束時間
private long end;
SeckillExecution秒殺執(zhí)行后的結果
private long seckillId;
// 秒殺執(zhí)行結果狀態(tài)
private int state;
// 狀態(tài)標識
private String stateInfo;
// 秒殺成功對象
private SuccessKilled successKilled;

異常設計

????????在Service接口中我們可以看到我們拋出的異常都是自己定義的是目,這其實是為了提高程序的可讀性谤饭,所以我們設計了重復秒殺異常和秒殺關閉異常。

事務設計

在秒殺系統(tǒng)中,事務是最重要的一部分揉抵,由于秒殺系統(tǒng)對數(shù)據(jù)庫操作要求很高亡容,所以我們采用聲明式事務,Spring配置事務的方式有很多中冤今,這里我們使用基于注解式的事務

使用注解控制事務方法的優(yōu)點:

1.開發(fā)團隊達成一致約定闺兢,明確標注事務方法的編程風格
2.保證事務方法的執(zhí)行時間盡可能短,不要穿插其他網(wǎng)絡操作戏罢,RPC/HTTP請求或者剝離到事務方法外部
3.不是所有的方法都需要事務屋谭,如只有一條修改操作,只讀操作不需要事務控制
我們只需要在需要事務的方法上面加上@Transaction注解即可
最后貼出代碼的地址龟糕,如果你不明白歡迎交流

https://github.com/lctiter/seckill

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末桐磁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子讲岁,更是在濱河造成了極大的恐慌我擂,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缓艳,死亡現(xiàn)場離奇詭異扶踊,居然都是意外死亡,警方通過查閱死者的電腦和手機郎任,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來备籽,“玉大人舶治,你說我怎么就攤上這事〕碘” “怎么了霉猛?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長珠闰。 經(jīng)常有香客問我惜浅,道長,這世上最難降的妖魔是什么伏嗜? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任坛悉,我火速辦了婚禮,結果婚禮上承绸,老公的妹妹穿的比我還像新娘裸影。我一直安慰自己,他們只是感情好军熏,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布轩猩。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪均践。 梳的紋絲不亂的頭發(fā)上晤锹,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音彤委,去河邊找鬼鞭铆。 笑死,一個胖子當著我的面吹牛葫慎,可吹牛的內容都是我干的衔彻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼偷办,長吁一口氣:“原來是場噩夢啊……” “哼艰额!你這毒婦竟也來了?” 一聲冷哼從身側響起椒涯,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤柄沮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后废岂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祖搓,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年湖苞,在試婚紗的時候發(fā)現(xiàn)自己被綠了拯欧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡财骨,死狀恐怖镐作,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情隆箩,我是刑警寧澤该贾,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站捌臊,受9級特大地震影響杨蛋,放射性物質發(fā)生泄漏。R本人自食惡果不足惜理澎,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一逞力、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糠爬,春花似錦掏击、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灯变。三九已至,卻和暖如春捅膘,著一層夾襖步出監(jiān)牢的瞬間添祸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工寻仗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刃泌,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓署尤,卻偏偏與公主長得像耙替,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子曹体,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內容