目前我們所接觸到的許多項(xiàng)目開發(fā),大多數(shù)都應(yīng)用了 ORM 技術(shù)來實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的交互,ORM 雖然有諸多好處,但是在實(shí)際工作中,特別是在大型項(xiàng)目開發(fā)中,容易發(fā)現(xiàn) ORM 存在一些缺點(diǎn),在復(fù)雜場(chǎng)景下,反而容易大大增加開發(fā)的復(fù)雜度及犧牲靈活度。使用 ORM 不寫 SQL 而使數(shù)據(jù)庫(kù)交互變得簡(jiǎn)單易行,是否能夠達(dá)到預(yù)期效果,要畫一個(gè)問號(hào)。
主要問題可能存在于以下幾點(diǎn):
1.大幅度犧牲性能。
2.雖然隱藏了數(shù)據(jù)層面的設(shè)計(jì),但并沒有從根本上降低數(shù)據(jù)訪問復(fù)雜度,只是將復(fù)雜緯度從一個(gè)點(diǎn)(SQL,存儲(chǔ)過程)轉(zhuǎn)移到另一個(gè)點(diǎn)(代碼),以EF為例,最終生成的代碼性能與C#書寫有很大關(guān)系,且難以通過成熟的數(shù)據(jù)庫(kù)技術(shù)反查性能瓶頸。
3.對(duì)于復(fù)雜查詢,ORM 力不從心,雖然從技術(shù)角度說實(shí)現(xiàn)肯定都能實(shí)現(xiàn),但是代價(jià)是不值的。
有朋友認(rèn)為 ORM 可以使不懂?dāng)?shù)據(jù)庫(kù)的開發(fā)人員也能在開發(fā)中輕松實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的交互,但是,在大型項(xiàng)目中,讓不懂?dāng)?shù)據(jù)庫(kù)的開發(fā)人員做這塊工作,Are you kidding me?