2011-11-25 24 views
2

第一次海報,長(ish)時間潛伏者。'複合'類應該引用'父'類嗎?

我試圖開發一個簡單的項目管理程序作爲一個學習練習,並試圖學習和遵循良好的編程實踐(編碼接口,避免setter [不完全確定這一點],使用泛型),但有一些我試圖研究和解決的問題,但沒有提出一個令人滿意的解決方案,或者沒有一個對我有直接意義。

最終它將使用帶有Hibernate/JPA/MySQL後端的Wicket前端,因此我使用的是地圖而不是列表(避免「不能同時獲取多個行包」的Hibernate錯誤)。

在基本層面,我有以下類別:

  • 項目(時間盒,需求,...)
  • 時間盒(任務,...)
  • 要求(任務。 ..)
  • 任務(...)

從鏈中的任何,我需要知道什麼是家長和兒童。我想知道時間框屬於某個項目,並且還有任務(這些任務也由需求擁有)。

我在Project中寫了一個構造函數方法addRequirement(Requirement,Project),它添加了需求HashMap作爲我目前認爲是解決方案的暫定示例。

  1. 我應該將項目本身放入一個與之相關的需求中,還是隻需要一個唯一的文本參考以便在需要時查找?
  2. 我應該堅持缺少setter,並且使用大的構造函數和構造函數方法,或者使用setter方法。
  3. 我應該擔心hashCode被限制爲整數嗎?我應該爲hashMaps整數而不是字符串做鑰匙嗎?

我已經上傳了我正在處理的兩個類,並且任何建設性的批評都會非常有幫助:)。

項目: http://pastebin.com/yc1dG8FC

要求: http://pastebin.com/GkPvUZme

提前感謝!

+0

爲什麼使用地圖?地圖用於通過鍵索引值。看來你的項目有一套要求。爲什麼要使用地圖來存儲它們。地圖的關鍵是什麼?如果必須在施工後更改某些值,則設置器非常有用。在創建項目時知道項目的所有要求是相當罕見的。通常,您創建一個項目,然後向項目添加需求。 –

+0

另外,CascadeType。ManyToOne上的ALL錯誤:刪除單個需求時,您不想刪除整個項目。 –

+0

對不起,我弄明白了我爲什麼使用Google Maps的原因。 當我最初嘗試使用早期實驗中的列表時,我得到了「無法同時獲取多個行李」的錯誤,其中一個解決方案建議是使用Map來代替它們。我將擁有諸如project.addRequirement()之類的方法,而不是project.setRequirements()。 感謝CascadeType建議。 – matthewh86

回答

0

思考了一段時間後,我覺得它提供的S使用某種延遲初始化的好主意,

爲什麼呢?因爲如果急於加載對象,您將查詢層次結構中的所有內容