2013-02-22 68 views
0

我遇到了一個正在處理的項目的問題。我需要創建一個將實體對象轉換爲VO(Value Object)形式的映射器,我需要這樣做來限制持久層和業務層之間的依賴關係,但是我有一些循環依賴關係無法解析,看看這個例子:創建一個具有循環依賴關係的實體映射器

我想在我的業務層中使用Competence對象,所以我使用映射器將實體轉換爲可用於我的圖層的VO。

class Competence { 
    private Domain dom; 
} 

class Domain { 
    private List<Competence> lComp; 
} 

但是,當我轉換能力的對象,我需要一個域轉換過,當我轉換一個域名,我需要的能力列表轉換等等等等...我真的不希望轉換一半我的數據庫:/

我想將該對象的一半或避免某些對象來停止該週期,但它是危險的,這是不是真的對我的問題的解決方案:/

Haved你解決解決這個問題?

在此先感謝! :)

+0

您是使用現有的持久層實現(例如Hibernate)還是自己管理持久性? – Grimmy 2013-02-22 12:43:29

+0

我正在使用EclipseLink管理持久層 – BlackMario 2013-02-22 12:45:53

+0

您是否因爲試圖將ValueObject轉換爲XML(例如,從Web服務返回對象時自動發生)而遇到此問題? – 2013-02-22 12:48:04

回答

0

有幾種解決方法。首先,你必須決定你想轉換哪一方。假設您想要轉換Competence s,而不是轉換Domain s。

  1. 使用ID參考Competence中的Domain
  2. 使用存根Domain僅包含您需要的ID和最少一組字段(不包括Competence)的對象。

希望我已經正確理解你的問題。

1

一個標準的機制來處理這類問題是重新編寫的東西,如:

class Competence { 
} 

class Domain { 
} 

class CompetenceDomain { 
    Competence competence; 
    Domain domain; 
} 

Map<Domain,List<Competence>> domainsWithCompetence = ...; 
Map<Competence,Domain> competencesInDomain = ...; 

這破壞了對象的關係出從對象本身成爲一個獨立的機制。