创建具有循环依赖关系的实体映射器

时间:2013-02-22 12:36:53

标签: java dependencies cycle

我正在处理一个项目的问题。我需要创建一个映射器,将实体对象转换为它的VO(值对象)形式,我需要这样做来限制我的持久层和我的业务层之间的依赖关系,但我有一些我无法解决的循环依赖,看看这个例子:

我想在业务层使用Competence对象,所以我使用mapper将实体转换为我的图层可用的VO。

class Competence {
    private Domain dom;
}

class Domain {
    private List<Competence> lComp;
}

但是当我转换一个Competence对象时,我也需要转换一个域,当我转换一个域时,我需要转换Competence列表等等...而且我真的不想转换我的数据库的一半: /

我正在考虑转换对象的一半或避免某些对象停止循环,但它很危险,这不是我的问题的真正解决方案:/

有解决方案吗?

提前致谢! :)

2 个答案:

答案 0 :(得分:1)

处理此类问题的一种标准机制是重新编码为:

class Competence {
}

class Domain {
}

class CompetenceDomain {
  Competence competence;
  Domain domain;
}

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

这会将对象的关系从对象本身分解为单独的机制。

答案 1 :(得分:0)

有很多方法可以解决这个问题。首先,您必须决定要转换的那一方。我们假设您要转换Competence而不转换Domain

  1. 使用ID引用Domain内的Competence
  2. 使用仅包含您需要的ID和最小字段集(不包括Domain)的存根Competence对象。
  3. 希望我能正确理解你的问题。