7

使用OR映射器有意義嗎?使用OR-Mapper有意義嗎?

我在堆棧溢出的推杆有這個問題,因爲這是最好的地方,我知道,找到聰明的開發商願意給他們的協助和意見。

我的推理如下:

1.)SQL屬於哪裏?

a)在我所從事的每一個專業項目中,數據的安全性都是關鍵要求。存儲過程爲控制訪問和審計提供了一個自然的途徑。

灣),在生產應用中的問題往往可以在表和存儲過程之間沒有撲滅新版本得到解決。

2.)如何控制生成的SQL?我相信分析樹來生成高效的SQL。 我在SQL-Server和Oracle中優化SQL的經驗相當豐富,但如果我再也不用這樣做,就不會感到受騙。 :)

3)是什麼,如果我從存儲過程中讓我的數據使用OR映射器的意義呢?

我已經使用存儲庫模式與本土通用數據訪問層。 如果一個集合需要緩存,我將其緩存。我也有在一個小的CRUD應用程序上使用EF的經驗,並有經驗幫助調整出現性能問題的NHibernate應用程序。所以我有點偏見,但願意學習。

在過去的幾年裏,我們都已經聽到了很多尊敬的開發商提倡使用特定的OR映射器(實體框架,NHibernate的,等等)的。

有誰能告訴我爲什麼有人應該轉向ORM進行主流項目的主流開發嗎?

編輯:http://www.codinghorror.com/blog/2006/06/object-relational-mapping-is-the-vietnam-of-computer-science.html似乎對這個話題的討論強,但它是過時的。

另一個編輯: 由於各自的性能優勢以及能夠將編程邏輯添加到數據更近的能力,每個人似乎都同意Stored Procedures將用於重型企業應用程序。

我看到支持OR映射器的最強論據是開發人員的生產力。

我懷疑ORM運動的一個大動力是開發人員偏好保持持久性不可知(不關心數據是否在內存中[除非緩存]或數據庫)。

對於本地和小型Web應用程序,ORM似乎是非常出色的時間保護程序。

也許我看到的最好的建議是從client09:使用ORM的設置,但使用存儲過程對數據庫密集型的東西(AKA當ORM似乎是不夠的)。

+2

CSLA不是一個OR映射器。這是一個普遍的誤解。 – 2011-03-17 18:49:30

+1

也許這對你來說是最新的。 http://stackoverflow.com/questions/404083/is-orm-still-the-vietnam-of-computer-science – dkretz 2011-03-21 23:37:53

回答

4

我是一個多年的專業SP,並且認爲這是做DB開發的唯一正確方法,但是我已經完成了最後的3-4個項目,我在EF4.0中完成了w/out SP和改進在我的工作效率方面真的令人敬畏 - 現在我可以用幾行代碼來完成這些事情,而這些代碼將會在一天之前帶走我。

我仍然認爲SP對於某些事情很重要(有些時候你可以通過精心選擇的SP來顯着提高性能),但是對於一般的CRUD操作,我無法想象會回頭。

所以對我來說簡短的答案是,開發人員的生產力是使用ORM的原因 - 無論如何,一旦你完成了學習曲線。

1

存儲過程非常適合將數據庫邏輯封裝在一個地方。我曾參與一個只使用Oracle存儲過程的項目,目前正在使用Hibernate。我們發現開發冗餘過程非常容易,因爲我們的Java開發人員不熟悉PL/SQL包依賴關係。

作爲該項目的DBA,我發現Java開發人員更喜歡將所有內容都保存在Java代碼中。你遇到了偶爾的問題,「爲什麼我不能循環所有剛剛返回的對象?」這導致了一些「爲什麼不是索引照顧這個?」的問題。

使用Hibernate,您的實體不僅可以包含其鏈接的數據庫屬性,還可以包含對它們採取的任何操作。

例如,我們有一個任務實體。人們可以添加或修改一個任務等等。這可以在命名查詢中的Hibernate實體中建模。

所以我會說去一個ORM設置,但使用數據庫密集的東西程序。

將SQL保留在Java中的一個缺點是,運行開發人員使用非參數化查詢將應用程序打開到SQL注入的風險。

+0

爲了迴應:「使用Hibernate,您的實體不僅可以包含其鏈接的數據庫屬性,還可以包含對他們採取的任何行動。「但是我可以在沒有ORM的情況下得到它。此外,單一的責任也必須在這裏發揮作用。 Dto的作用是什麼:傳輸數據或基於計算的關閉值? – RBZ 2011-03-31 20:15:27

3

另一種方法......現在,隨着無SQL運動的增加,您可能想嘗試使用對象/文檔數據庫來存儲數據。這樣,你基本上就會避免那個OR Mapping的地獄。將數據存儲爲應用程序使用它們的數據,並在工作進程中對場景進行轉換,以將其轉換爲更多關係/ OLAP格式以供進一步分析和報告。

1

以下是我的私人意見,所以它是比較主觀的。

1.)我認爲需要區分本地應用程序和企業應用程序。對於本地和一些Web應用程序,直接訪問數據庫是可以的。對於企業應用程序,我認爲更好的封裝和權限管理使存儲過程最終成爲更好的選擇。

2.)這是ORM的一個大問題。它們通常針對特定的查詢模式進行優化,只要您使用那些生成的SQL通常具有良好的質量。但是,對於需要靠近數據執行以保持高效的複雜操作,我的感覺是,使用手動SQL代碼是stilol的方式,在這種情況下代碼會進入SP。與直接訪問「鬆散」數據集(即使這些數據是鍵入的)相比,處理作爲數據實體的對象也是有益的。將結果集反序列化爲對象圖是非常有用的,無論結果集是由SP返回還是從動態SQL查詢返回。

如果您使用SQL Server,我邀請您看看我的開源bsn ModuleStore項目,它是一個DB模式版本控制框架,並通過一些輕量級的ORM概念使用SP(調用對象時的序列化和反序列化SP)中。

相關問題