从一个需求看问题的无限复杂化和简单化
一個(gè)需求 如果你一開始的出發(fā)點(diǎn)就錯(cuò)了,那么后續(xù)的設(shè)計(jì)只會(huì)非常復(fù)雜,而且還會(huì)有漏洞,也很難發(fā)現(xiàn),發(fā)現(xiàn)了也很難解決。
先看數(shù)據(jù)結(jié)構(gòu):
A表 主鍵id? ?其他各種字段不重要? ,重要的就一個(gè)字段sort字段
aid1? ?sort=1
aid2? ?sort=1
---------------------
B表? A的關(guān)聯(lián)表 存A的id? ?還有就是C表的id
aid1? ?cid1
aid2? ?cid2
-------------------
C表? 某種數(shù)據(jù)
cid1
cid2
------------------
需求是:A表的sort在同一個(gè)cid下必須唯一
也就是某個(gè)sort例如是1被aid1和aid2占用,但是由于在B表他們是關(guān)聯(lián)不同的cid所以沒事,如果是同一個(gè)cid就不允許。
也就是你入庫(kù)的新增更新的時(shí)候要check.這個(gè)比較簡(jiǎn)單,新增的cids和B表同sort關(guān)聯(lián)的cids比較 只要不一樣就行 ,只要有交集就返回false
Collections.disjoint
?
這里需要注意就是 你更新的時(shí)候 由于sort不變那么顯然是要允許的,這是自己和自己比較,這個(gè)時(shí)候要看新管理的B表我新增的cid有沒有被占用
?
最簡(jiǎn)單的做法是拿sort在A表查aid ,然后拿aids在B表查一個(gè)List<B>
再對(duì)List<B>遍歷,如果aid=更新的aid那么忽略 說明是自己
如果不是? 那么看cid=更新的時(shí)候傳遞的cid,只要有命中那么說明就有重復(fù)的? 就返回false
將更新的cids轉(zhuǎn)為一個(gè)set就行了。
?
這個(gè)問題 如果不是這樣做的 嘗試其他辦法組建各種list然后去重組合各種玩法就復(fù)雜了。
?
這題可以思考下。
?
總結(jié)
以上是生活随笔為你收集整理的从一个需求看问题的无限复杂化和简单化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一副眼镜多少钱啊?
- 下一篇: 大厂线上案例复盘--代码漏洞