1.3 為什么不能一直做CURD?

什么是CURD?
就是Create Update Read Delete操作,通常是指對(duì)依托對(duì)數(shù)據(jù)庫(kù)的增刪改查,實(shí)現(xiàn)功能開發(fā)的過(guò)程。
代碼實(shí)例


這樣的開發(fā)有什么問(wèn)題?
舉例來(lái)說(shuō):
商品下單,對(duì)應(yīng)的是數(shù)據(jù)庫(kù)中保存了商品的訂單的記錄,視為商品下單成功了
修改訂單的狀態(tài),表現(xiàn)為修改數(shù)據(jù)庫(kù)的狀態(tài)字段。
示例代碼如下
訂單表如下:

這樣開發(fā)有什么問(wèn)題?
1. 業(yè)務(wù)被數(shù)據(jù)庫(kù)所綁架
數(shù)據(jù)庫(kù)的數(shù)據(jù)就是業(yè)務(wù)的結(jié)果,業(yè)務(wù)被數(shù)據(jù)庫(kù)所綁架,調(diào)整數(shù)據(jù)庫(kù)將是在對(duì)業(yè)務(wù)調(diào)整。

在業(yè)務(wù)被數(shù)據(jù)庫(kù)所綁架,并且數(shù)據(jù)庫(kù)表與表還有關(guān)聯(lián),有時(shí)候還有數(shù)據(jù)冗余,大部分程序員在面對(duì)這樣的數(shù)據(jù)庫(kù)設(shè)計(jì)下,都不敢改動(dòng),除非必要,不然不敢動(dòng)。
單元測(cè)試形同虛設(shè)
由于業(yè)務(wù)被數(shù)據(jù)綁架,單元測(cè)試高度依托于數(shù)據(jù)庫(kù),導(dǎo)致單元測(cè)試完全是對(duì)數(shù)據(jù)庫(kù)的測(cè)試了,讓單元測(cè)試失去了其價(jià)值。

單元測(cè)試就是施工的防護(hù)架,沒(méi)有他就很容易讓施工,變成了拆除。
由于業(yè)務(wù)入口遍布各地,系統(tǒng)無(wú)法輕易更改,容易牽一發(fā)而動(dòng)全身
由于dao層的代碼遍布在service層的各處,導(dǎo)致同一個(gè)表的數(shù)據(jù)維護(hù)將會(huì)在項(xiàng)目很多地方出現(xiàn),在缺乏約束的情況下,導(dǎo)致業(yè)務(wù)對(duì)數(shù)據(jù)維護(hù)變的泛濫,讓系統(tǒng)的維護(hù)性大大降低。
舉例來(lái)說(shuō)
修改訂單狀態(tài)的場(chǎng)景:
用戶取消訂單,商家取消訂單,商家確認(rèn)發(fā)貨,用戶確認(rèn)收貨等,這些地方可能都是直接調(diào)用
dao.updateStateById(id,state)的代碼執(zhí)行的。
假如需要增加對(duì)訂單狀態(tài)的統(tǒng)計(jì)功能,你或許需要將上述所有的地方都得修改一遍。

對(duì)于接收項(xiàng)目的人來(lái)說(shuō),輕易不敢修改,搞不好就是一場(chǎng)災(zāi)難。