2010-09-10 73 views
1

我正在使用我的隊友(.NET/Oracle)的遺留項目。該項目尚未完成,正在建設中,遠未達到生產。他遵循「傳統方式」訪問數據,這是創建存儲過程,然後使用數據庫驅動程序來調用它們。我想遵循一種「現代方式」來訪問數據:使用ORM來抽象和訪問數據。就時間和金錢而言,交換機不會花費太多。問題是,他比我更有經驗,他有點討厭ORM(他沒有解釋爲什麼,但他說這很混亂)。我現在獨自一人,但我沒有足夠的鼓勵去切換到ORM。如何鼓勵自己切換到ORM?

然後,我應該切換到ORM嗎?如果是的話,請鼓勵我。

編輯:我不知道爲什麼有人需要關閉這個問題。我不夠鼓勵,因爲我不確定哪種方式更好。你可以說服我,ORM讓我的開發速度更快,錯誤更少,或者存儲過程更快,......無論如何。我想問你,這是誰,有經驗的程序員(比我,也是我的隊友)。我的隊友得到了使用存儲過程的理由,許多程序員都有自己的存儲過程。我需要知道他們爲什麼這麼認爲(存儲過程相當不錯,或者他們只是想使用類似的東西,等等......)

非常感謝。

回答

1

這取決於你最喜歡哪種語言以及正在開發哪種平臺。基於這個標準,我會建議學習一個MVC框架,這會迫使你使用良好的ORM實踐。在這個空間裏,Ruby on Rails(基於Ruby)和CakePHP(基於PHP)非常適合網頁開發。雖然在ORM方面不太嚴格,但如果你喜歡PHP,ZEND框架也非常好。如果您正在使用MS SQL Server或正在爲桌面開發,則需要使用.NET MVC,這與任何.NET語言都兼容。

這些框架將迫使您堅持良好的編碼實踐,因此您將得到更好的代碼。他們還自動抽象數據庫模式,創建與數據交互的對象和方法。學習曲線起初可能看起來像是一場艱苦的戰鬥,但一旦你瞭解了這些概念,這門語言的基礎就開始了,你將成爲一名超級程序員!

還有快速應用程序開發(RAD)的附加優勢。使用大多數ORM框架啓動並運行正常運行的應用程序非常簡單快捷。他們可以在開發生命週期中節省大量時間。

+0

我認爲MVC和ORM是正交技術。 – 2010-09-20 17:02:06

7

ORM不是「現代」的,它們旨在最大限度地減少與數據庫的交互,以至於您通常不必編寫SQL。這也是通過使用SQL存儲過程&函數得到的,假設您有一個團隊的數據庫開發人員致力於開發&維護。

在ORM中支持本機SQL的情況越來越普遍,因爲它們可理解地限制了處理複雜SQL的能力。人們在SQL開發方面存在問題,我不認爲軟件抽象會更好......

「傳統方式」更有針對性,比ORM執行速度更快。 ORM的好處是支持多個數據庫供應商,而無需瞭解每個供應商的錯綜複雜情況或SQL本身。

我會學習ORM的就業可能性,最好通過知道何時使用它。

1

我已經通過使用(顯然現在正在收集灰塵在閣樓中)超輕量級映射器iBatis,iBatis查詢定義XML中指示單個/多個結果集行爲的一些額外屬性,以及XSLT樣式表讀入查詢定義並吐出一個漂亮的DAL類的源代碼。

使用這種方法,您可以插入存儲過程或直接SQL。您確實錯過了尖端ORM的一些更好的特性,例如LINQ支持和內存中緩存,但您在應對80/20規則偏差方面的麻煩也較少,這些規則偏向往往存在於一個架構中最初並沒有考慮ORM。

+0

我寫了一個代理類生成器,它生成DAL類並基於表定義生成CRUD特效。所有的表格都有共同的列(我願意,創建日期,刪除日期(可爲空))。這些類是部分的,所以它們很容易擴展,並且可以輕鬆地增強/修改sprocs。在不犧牲功率的情況下,它可以很好地工作並節省大量時間 – 2010-09-13 15:02:32

13

這裏有三個原因不能切換:

  1. 的Oracle PL/SQL是一個完整的編程語言。這不僅僅是一些凍結的SQL語句和一些條件編程。所以很可能PL/SQL層包含的邏輯不易在ORM中實現。

  2. 臭名昭着的Oracle數據庫許可證很貴。最大限度地提高投資回報率的最佳方式是利用內置功能。這對於一個ORM工具來說很難做到,有時甚至是不可能的。

  3. 您將您的應用程序描述爲「遺留」,表明它在生產中。如果是這樣,改變數據訪問架構將是一種沉溺。您和您的同事將花費大量時間編寫代碼,更不要說整個應用程序的迴歸測試,對您的用戶沒有明顯的好處。

+2

+ 10k有線索。 – 2010-09-10 05:11:00

+0

@APC:我忘了說,遺留應用程序尚未完成,它正在建設中,當然還沒有投入生產。所以,如果我切換到ORM,這不是那麼昂貴 – Vimvq1987 2010-09-10 06:02:19

+2

你怎麼能在建立一個新的「傳統」應用程序的過程?不計算... – 2010-09-10 07:22:20

3

從你自己的話:

  • 你的隊友是老練多了
  • 你必須來這裏論據,討論
  • 你的隊友媒體鏈接有一個工作解決方案
  • 您有迫近的期限

除了技術上的爭論之外,我個人也不敢根據這些事實展開關於改變數據訪問層的討論。與同事談談在新項目中使用ORM。在一個正在運行的項目中,不要在討論已經發生的基本缺陷的討論中痛苦。

+1

+1 @Robert:我同意你的大部分意見,但原則上與你的最後一句話不一致 - 如果已經做出了可能被嚴重誤導的決定,那麼它仍值得討論。 (當然,在這種情況下,這個決定似乎是正確的。) – 2010-09-10 11:18:56

+1

如果以前的決定和假設不定期討論,我們的行業將不會熟練地發展。永遠不要害怕去質疑一切。否則,創新就不會發生,事情就會停滯不前。 – 2010-09-10 19:18:53

+0

@Mark。同意,這不是一般性陳述(主要),而是提到第三點:有一個工作解決方案。 – 2010-09-14 11:28:24

2

此時切換到ORM是一個被寵壞的孩子的行爲,如果你事先未經我的同意在我的團隊中做過,我會解僱你。有許多有效的理由使用存儲過程,包括不允許在表級別訪問數據,這對於金融系統來說非常重要。想要使用其他工具,因爲你想學習它是幼稚和不專業的。

ORMS對於許多複雜問題並不是更好,當事情變得複雜時,它們通常會創建執行不力的代碼。存儲的特效可以更容易地進行性能調整,這非常重要。存儲過程爲您的數據提供更好的安全性,因爲您可以限制直接訪問表,並且只允許用戶執行porc定義的任務,從而減少欺詐的可能性。如果所有查詢都存儲在特效庫中,那麼重構數據庫也容易得多。對查詢的更改也更容易應用,更容易將一個更改存儲過程加載到產品,而不是重新編譯和重新加載整個應用程序。

desicuss工具使用的時間是在項目開始時不在中間。一個項目在ORM中完成,一些在倉庫中完成,將成爲一個噩夢來維護。

-3

在我看來,SPROCS從不是一個好主意。

  • PL/SQL是很少,而且常常是不自動測試。當你實現它時,它可能工作,但沒有單元測試,你怎麼能確定它將在沒有迴歸測試的情況下繼續工作。我認爲每個人都應該採用的做法是TDD。有了紀律,TDD將不允許編寫代碼,不會自動測試每個構建的迴歸問題。不要誤解我的意思,我不建議你去TDD你的PL/SQL(我知道這在技術上是可行的)。我建議你將代碼保存在你的代碼庫中。
  • PL/SQL不利於簡單的調試。有可能通過SPROCS而不是通過傳統的應用程序調試手段(特別是不從.NET到Oracle;可能從.NET到MS SqlServer)。
  • 使用數據庫引擎特定邏輯,不僅可以將您的應用程序綁定到該數據庫供應商,還可以將該應用程序數據庫的版本以及經常使用的數據庫驅動程序版本綁定到該應用程序。我一直在使用.NET和MS SqlServer的項目,它最初是用許多SPROCS實現的。該客戶最終表示,他們不願意支付SqlServer許可費用,並希望切換到開源的數據庫引擎(MySQL具體)。我們無法輕鬆滿足這個要求,而且當那裏有那麼多的框架並且很容易便於切換DB引擎時,這是不可接受的。

這就是說,數據庫邏輯的優點已經被指出,如優化的性能,充分利用現有的Oracle許可證以及切換現有應用程序的複雜性。除了ORM之外,我絕不會開始一個新項目,但遷移現有應用程序並不容易。最後,你將不得不衡量利弊,並做出明智的決定,證明投資回報是合理的。

+0

我爲我的意見提供了有效的論點,我希望低調的選民也會這樣做。讓你想知道他們是否有任何... – 2011-03-07 14:33:47

相關問題