制作对象转换器的最佳实践

时间:2012-04-03 03:01:51

标签: java oop

我遇到了一个自己无法解决的问题,因此,我正在寻求你的帮助。问题如下: 我们必须升级持久层。以前项目使用JDBC来访问数据,但现在它应该使用JPA。这意味着现在在新对象中检索数据,但系统与旧对象一起使用。因此,我们应该在新旧实体之间编写一些转换器。但问题是,有时候从旧的实体形成新的实体,我们需要一些额外的信息。例如:

class OldEntity{
    private int id;
    // old entity contains only foreign key
    private int otherEntityId;
    ...
}

class NewEntity{
    private int id;
    // new entity contains object that associated with foreign key
    private OtherEntity otherEntity;
    ...
}

我们想为所有转换器添加一些通用接口,但是如果我们从旧实体转换为新实体,首先,我们应该通过其id检索“otherEntity”并将其提供给转换器。由于我们有很多具有不同结构的实体,转换器的方法应该接收不同数量的不同参数以形成新的实体。 问题是:对于这样的问题,有没有好的架构解决方案?

2 个答案:

答案 0 :(得分:1)

它似乎是Adapter Pattern的工作。您的应用程序需要OldEntities,但现在由NewEntities管理,因此需要一个管理OldEntities和NewEntities之间转换的适配器。

然后,您需要为域模型中的每个实体构建一个适配器。他们应该是这样的:

class NewEntityAdapter extends OldEntity{
    private NewEntity newEntity; 

    //This is an overriden method
    public int getOtherEntityId(){
        return newEntity.getOtherEntity().getId();

}

答案 1 :(得分:1)

你可以试试这个。

public interface IBaseEntity{

    public int getId();

}

public class OldEntity implements IBaseEntity{
    public int getId(){
        return id;
    }
}

public class NewEntity{
    IBaseEntity entity;
    public NewEntity(IBaseEntity entity){
        this.entity=entity;
    }
    public int getId(){
        return entity.getId();
    }
}