84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
大家好!我在写一个个人博客,博客平台允许多个作者,现在设计dao接口遇到问题,当我删除一篇文章的时候是否应该传递作者id,代码如下:
方式一
// 防止其他作者通过修改id参数删除文章,需要在service中,先判断该文章是当前作者的 int deleteById(Integer id);
方式二
// 删除文章,依据编号和作者编号 int deleteByIdAndAuthorId(Integer id, Integer authorId);
请问该怎么做,给我点建议?
学习是最好的投资!
我個人的想法是兩種實作思路第一種dao層你做方式二這樣的,這樣你在service透過session取到操作用戶的id之後,在dao層操作資料庫時加上作者id,給前端的介面是傳文章id過來後端第二種dao層做方式一的,在service層取一下文章id對應的作者id,判斷一下操作用戶id和作者id是否相符,相符就調用dao層刪除,不符就回傳錯誤,前端的介面一樣還是傳文章id過來
沒注意你的註解哈那麼我再解釋一下我的想法吧,我覺得你提的方式一比較好,首先在service做判斷邏輯,Dao層專注於操作數據庫,也方便把判斷邏輯進行改寫,同時還能回傳錯誤操作的提示,如果你說方式二也能判斷,也能拋異常告訴用戶操作錯誤,只是把判斷放在Dao層而已,那和我說的第二種也類似了,都是先取,再判斷,再刪,那不如把判斷邏輯交給service層來做呢當然如果刪除操作可以返回被操作的數據條數,那也可以選擇方式二嘛,如果操作了0條數據,那就代表文章不屬於操作用戶嘛,但是那樣也很蛋疼,刪除操作做完了才告訴你這篇文章不屬於你、你不可以操作,想起來就怪怪的一點點個人意見哈,不贊同的話可以繼續討論
個人感覺,
如果一篇部落格對應一個作者的話,可以直接考慮方式二,實作起來邏輯較簡單,同時能減少資料庫查詢次數。
如果系統考慮到除作者之外還有其他管理員能對博客系統進行操作,考慮方式一,這樣擴展性好,當修改刪除需求時較方便。
——一個沒做過部落格系統的人的猜想
防止其他作者透過修改id參數刪除文章,需要在service中,先判斷該文章是目前作者的
這個操作,無論如何傳參,你都是要檢查的。
那麼問題就簡單了,問題就變成了從session取authorId,還是從query string裡面拿authorId。
根據我用了多年的部落格的經驗。流行的部落格程式是两个参数都从query string里面传递。但是,不是强制的。也就是你只传postId也是可以的。之所以这样做。是为了有更多的参数可以供自定义url格式使用。
两个参数都从query string里面传递
自定义url
我個人的想法是兩種實作思路
第一種dao層你做方式二這樣的,這樣你在service透過session取到操作用戶的id之後,在dao層操作資料庫時加上作者id,給前端的介面是傳文章id過來後端
第二種dao層做方式一的,在service層取一下文章id對應的作者id,判斷一下操作用戶id和作者id是否相符,相符就調用dao層刪除,不符就回傳錯誤,前端的介面一樣還是傳文章id過來
沒注意你的註解哈
那麼我再解釋一下我的想法吧,我覺得你提的方式一比較好,首先在service做判斷邏輯,Dao層專注於操作數據庫,也方便把判斷邏輯進行改寫,同時還能回傳錯誤操作的提示,如果你說方式二也能判斷,也能拋異常告訴用戶操作錯誤,只是把判斷放在Dao層而已,那和我說的第二種也類似了,都是先取,再判斷,再刪,那不如把判斷邏輯交給service層來做呢
當然如果刪除操作可以返回被操作的數據條數,那也可以選擇方式二嘛,如果操作了0條數據,那就代表文章不屬於操作用戶嘛,但是那樣也很蛋疼,刪除操作做完了才告訴你這篇文章不屬於你、你不可以操作,想起來就怪怪的
一點點個人意見哈,不贊同的話可以繼續討論
個人感覺,
如果一篇部落格對應一個作者的話,可以直接考慮方式二,
實作起來邏輯較簡單,同時能減少資料庫查詢次數。
如果系統考慮到除作者之外還有其他管理員能對博客系統進行操作,考慮方式一,
這樣擴展性好,當修改刪除需求時較方便。
——一個沒做過部落格系統的人的猜想
這個操作,無論如何傳參,你都是要檢查的。
那麼問題就簡單了,問題就變成了從session取authorId,還是從query string裡面拿authorId。
根據我用了多年的部落格的經驗。流行的部落格程式是
两个参数都从query string里面传递
。但是,不是强制的。也就是你只传postId也是可以的。之所以这样做。是为了有更多的参数可以供自定义url
格式使用。