2010-11-08 63 views
1

我正在實施一個大學項目來測試實體框架4.0與NHibernate(最新版本)相比的性能。我正在構建一個簡單的事務處理系統來執行此測試。我的實體將是客戶,帳戶,訂單,產品等。在EntityFramework和NHibernate之間切換

我想創建兩個單獨的DAL;第一個DAL將是EntityFramework,而第二個將是NHibernate。然後,我將創建一個業務邏輯層(BLL),它引用一個DAL或另一個DAL,並使用它來測試。 BLL將包含像'insertNewOrder()','amendExistingOrder()'等方法。我希望我的BLL獨立於框架,因此我可以輕鬆地在每個DAL之間切換。

爲了實現這一點,我建議實現一個接口'IContext',它將由每個DAL實現。 'IContext'將包含每個實體的'get()'方法以及'Save()'方法。然後每個DAL將以他們自己特定的方式實現這些方法。 'get()'方法將返回一個IObjectSet,而不是一個ObjectSet。

我將使用T4模板從我的EDM創建POCO實體並將它們移動到單獨的項目中。然後每個DAL可以引用相同的一組POCO實體。

然後,我的BLL將創建一個IContext接口的實例,並在該接口上調用方法,而不是創建特定的上下文(ObjectContext或ISession)。

這聽起來像一個可行的解決方案嗎?我在這個主題上找到的任何文章都包括使用知識庫,這是一種我不完全瞭解的模式,並且如果可能的話,不想實施。我的重點是測試每個平臺,而不是構建一個架構正確的應用程序。在這裏看到,例如:

Entity Framework POCO objects

我已經部分地基於從「編程實體框架的第二版」,由朱莉婭·勒曼在章這一做法。我對新罕布什爾州和EF(特別是新罕布什爾州)都是新手,所以任何意見或建議,將不勝感激。謝謝。

+0

退房http://ormbattle.net/。將您的結果與它比較可能會很有趣。他們還描述和討論了測試,這可以給你更多的想法:http://ormbattle.net/index.php/performance-tests.html – 2010-11-08 15:46:39

回答

4

您正在尋找的是存儲庫模式。參見(在很多其他地方)https://stackoverflow.com/questions/3175/repository-pattern-tutorial-in-c作爲例子。

存儲庫模式背後的想法是,你創建的接口爲數據訪問,例如:

public interface IAddressRepository 
{ 
    Address GetById(int id); 
} 

然後創建這個接口的兩個實現:一個是實體框架和一個NHibernate的。

最後,根據接口創建一個機制來獲取您需要的實現。 IoC容器如Windsor在這方面很出色。

0

如果你想測試性能,你不應該創建中間層。在兩種情況下都使用相同輸入/輸出的原始代碼,但僅限於其他情況。

創建中間層將限制您在兩種情況下的最小分母。通過分開實現兩個競爭部分,您可以針對一種技術進行優化和具體實現,這對於相同的訪問層來說是不可能的。

此外,您的任務不是創建相同的DAL,而是測試性能。因此,在嘗試其他方法之前,您應該先開始擔心兩種技術中的優化和特殊情況。

+0

感謝您的答覆。我認爲現在我會繼續我的中間層方法。我很高興保持項目範圍限於框架在應用於特定場景(本例中爲事務處理系統)時以(相對)默認配置執行的方式。我已經得到一位主管的建議,以確保我和喜歡的人相比,而且這些都是相當實質的框架。如果我分別看每一個,我可能會得到太多的材料,永遠不會完成! – JMc 2010-11-09 13:29:10