2013-02-22 65 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 = ...; 

这破坏了对象的关系出从对象本身成为一个独立的机制。