2011-02-03 72 views
6

我對軟件開發的世界比較陌生。我目前正在進行一個相當大的項目,這是一個體面的OO代碼 - 主要遵循域驅動設計原則。然而,在理論上這聽起來很好,但實際上整個對象關係阻抗都很糟糕,這意味着只使用ORM層,系統的某些部分非常慢,除非我們編寫優化的SQL查詢來覆蓋這些情況。此外,有時我們似乎被卡住,試圖看看我們是否應該基於SQL的性能與面向對象的原則對域進行建模。沒有ORM的域豐富的應用程序

這讓我問這個問題 - 這是大多數應用程序的構建方式嗎?意義 - 是的,面向對象很好,但是我發現很難相信,與這個對象關係不匹配相關的所有問題,這是構建應用程序的最佳方式嗎?我能想到的另一種方法是拋棄ORM,只進行域建模,直接用手直接編寫原生SQL查詢。我想知道是否實際上有足夠大小的軟件系統以這種方式構建。

對不起,如果我聽起來不錯 - 但我是新的,想知道還有什麼其他的方法。

回答

2

可以同時使用兩者。老實說,對於簡單的單個記錄修改和視圖(包括相關實體的顯示),ORM生成的代碼幾乎與我手工編寫的代碼相同。所以好處當然是我不要必須寫它。另外,小的模式修改可以優雅地處理。

對於其他一切,普通的SQL是王道。

我就是那個可以產生的任何代碼,產生,只要它不會產生一個明確不合版本的意見。我認爲這是我的關鍵點:大量的應用程序數據庫代碼可以通過ORM進行處理,並且仍然可以像數據庫專家編寫的手工編寫的sql代碼一樣執行。

3

不要道歉承認明顯。那些經驗豐富的人往往完全沒有意識到你有什麼:ORM是糟糕的工程,正是你指定的原因。

但我不想陷入咆哮。反對使用嵌入式SQL範圍的觀點來自風格,「我不希望在我的代碼中出現垃圾」,這個樣式,「SQL很醜。」但它的工作原理,速度很快,而且是很好的工程。

+0

曾與ORM的和普通的SQL + JDBC/ibatis一起工作,我仍然喜歡寫我的查詢或甚至更好,讓我的DBA優化我的查詢,這些參數聽起來更像是藉口不學習(propper)SQL – Harima555 2011-02-03 18:40:26

+1

實際上使用ORM並不意味着你無法控制生成的SQL,或者你不必擁有一個好的數據庫設計。此外,如果您需要特殊技能來編寫SQL查詢,通常意味着您的數據庫模式已損壞。模式應該使得最頻繁的查詢易於編寫(並且可以快速執行)。當我使用ORM時,我創建了我的模式,使得由我的ORM生成的查詢簡單快捷。這不是火箭科學。 – 2011-02-03 20:00:15