2010-01-02 70 views
1

我使用的是Castle ActiveRecord,但將它包裝在我自己的持久層中,因爲我想從應用程序代碼中隱藏這個事實。但是,我的實體都從ActiveRecordBase<T>繼承,所以我選擇的ORM泄露給應用程序。我特別不喜歡的是這些暴露我的實體的方法。隱藏類是Active Record的事實

如何在不從ActiveRecordBase繼承的情況下使用ActiveRecord?

我知道抽象的一部分會泄漏,因爲我的實體裝飾有ActiveRecord屬性,但我不認爲這部分是有意義的。

回答

3

當使用城堡的ActiveRecord的實體不必從基類繼承。您可以改用ActiveRecordMediator<T>。也許this article from the manual將有所幫助。

+0

像往常一樣,rftm :) – ripper234 2010-01-02 10:26:33

2

您可以使用組合而不是繼承 - 您的業務對象基本上包裝您的活動記錄對象並將持久性責任委託給它。

+0

因此,你建議我爲每個模型實體定義另一個包含它的實體?這似乎有點麻煩......或許我沒有得到你想說的話。你能提供一個代碼示例嗎? – ripper234 2010-01-02 06:36:54

+0

@ ripper234»你可以這樣做,但更簡單的實現就是使用內部類。 – 2010-01-02 06:44:18

+0

對不起,沒有代碼示例,我不明白你的答案。 – ripper234 2010-01-02 06:47:57

0

如果你只使用普通的NHibernate,你不必使用裝飾器等,你只需要彙總自己的hbm.xml文件,這是非常簡單的,有很多工具可以幫助。

請注意,雖然這並不直接回答你的問題,但我把它放在那裏,因爲使用你自己的NHibernate抽象和學習NH是一項很棒的技能,一旦你投入了時間,你將永遠不會再使用AR(好吧,除非它一個你想快速推出的小項目)。

我有我自己的自定義NH抽象層,你可以找到一些代碼樣本等在我的博客在這裏: http://www.picnet.com.au/blogs/Guido/post/2009/07/08/Code-Generated-DAL-%28Data-Access-Layer%29-using-ORM-Article-1.aspx

雖然這可能是在它告訴你什麼NH很好的理解可以讓頂部你今後要做。

圭多

+0

我確實想使用ActiveRecord(和FluentNH)來簡化問題,我只是不希望這會嚴重泄漏給應用程序。 – ripper234 2010-01-02 06:42:23