我從JBoss
網站上的教程學習Hibernate。我在代碼示例here中遇到困惑。休眠 - 一個設計問題
在4.1. A simple POJO example
有一個Cat
類代碼。
這Cat
類有作爲private Cat mother;
Q1到他母親的參考。如果這個類的標識符屬性爲id
,那麼存儲貓的母親身份而不是貓的母親對象會更好嗎?
意味着不是
private Cat mother;
豈不是更好有
private long motherId;
`
我從JBoss
網站上的教程學習Hibernate。我在代碼示例here中遇到困惑。休眠 - 一個設計問題
在4.1. A simple POJO example
有一個Cat
類代碼。
這Cat
類有作爲private Cat mother;
Q1到他母親的參考。如果這個類的標識符屬性爲id
,那麼存儲貓的母親身份而不是貓的母親對象會更好嗎?
意味着不是
private Cat mother;
豈不是更好有
private long motherId;
`
那就是冬眠含蓄爲你做。
關於ORM
的好處是,它完全隱藏了實施警告,因爲您正在使用RDBMS而不是使用普通對象。您可以使用mother
作爲Cat
,而不會打擾它在內部表示爲id
的事實。
不一定,存儲對象引用而不是Id是有益的,因爲它隱式驗證引用,因爲Id可以是任何數字,有效的Cat Id或其他。這是您必須處理的驗證和錯誤檢查的額外一層。
你必須警惕的唯一缺陷是序列化對象,並確保沒有無限循環,Dto可以在那裏幫助。例如,假設你想將Cat序列化爲一個web服務,並且你只想序列化一個貓而不是整個貓層次結構(貓,貓的母親,貓的母親的母親等)。您可以創建一個數據傳輸對象這是一個圍繞Car類的薄包裝,此包裝可以序列化Id而不是引用的對象,以便消費用戶可以在需要時獲取母親。 Dto還有其他的好處,比如維護一個不變的界面,而底層的域對象可以改變以適應代碼庫。
超出上述原因,簡單易用性如何?用實際對象的引用而成爲更優雅
Cat firstCat = //get starting cat somehow
Object someBroker = //get a 3rd party broker (like an entity manager)
Cat parent = broker.getCatById(firstCat.getParentId());
:
Cat firstCat = // get initial cat while ((Cat ancestor = firstCat.getParent)!=null) { //work with ancestor }
什麼叫「DTO的是良好的意味 如果我想用你的設計來遍歷一個家譜,代碼會看起來像那「 – 2010-03-12 18:00:54
更新了你的答案。 – vfilby 2010-03-12 18:05:00