我想知道在類中公開集合的建議方式是什麼,以及與使用NHibernate實體時做同樣的事情的方式有什麼不同。爲保護處理類和NHibernate實體中的集合屬性
IList<SomeObjType> MyProperty { get; set; }
具有調節器或私人給我一些時間,我多麼希望更多的控制:
讓我解釋一下......我從來沒有與我的班暴露集合屬性就像一個特定的問題處理收集。 我最近碰到這篇文章就由戴維奧比昂:
http://davybrion.com/blog/2009/10/stop-exposing-collections-already/
戴維,明確建議有收藏作爲IEnumerables,而不是讓說名單,以禁止其直接操縱這些內容的選項的用戶集合。我可以理解他的觀點,但我並不完全相信,通過閱讀他的文章中的評論,我不是唯一的評論。
當談到NHibernate的實體時,按照他提出的方式隱藏集合是非常有意義的,尤其是當級聯存在時。我想要完全控制會話及其集合中的實體,並且爲集合屬性公開AddXxx和RemoveXxx對我來說更有意義。
問題是怎麼做到的?
如果我有實體的集合作爲IEnumerables我沒有辦法添加/刪除元素,而沒有將它們轉換爲列表ToList()這使得一個新的列表,因此什麼都不能持久化或將它們轉換爲列表由於代理和延遲加載,這是一種痛苦。
的總體思路是不允許被檢索的實體,並已其收藏操縱(add.remove元素)直接而只能通過我同時履行收集持久性級聯公開的方法。
您的建議和想法將不勝感激。
你不需要AsEnumerable,IList 已經實現IEnumerable –
這很有道理。我意識到並建議其他人將私人財產映射到NHinernate,但從未設法爲此案件建立聯繫。謝謝。 – tolism7