填充不同对象的常用方法类似结构

时间:2011-02-25 04:22:47

标签: java refactoring

我有两个对象CreateDocumentHeader和RetrieveDocumentHeader,它们具有非常相似的结构。我正在阅读每个对象并填充DTO。我不想为每个对象创建不同的方法。如何编写单个方法来填充它们。这是两个类。

public class CreateDocumentHeaderType {
    protected CreateAdminRecordType administrativeRecord;
    protected CreateControlRecordType controlRecord;
    public CreateAdminRecordType getAdministrativeRecord() {
        return administrativeRecord;
    }
    public void setAdministrativeRecord(CreateAdminRecordType value) {
        this.administrativeRecord = value;
    }
    public CreateControlRecordType getControlRecord() {
        return controlRecord;
    }
    public void setControlRecord(CreateControlRecordType value) {
        this.controlRecord = value;
    }
}

public class RetrieveDocumentHeaderType {
    protected RetrieveAdminRecordType administrativeRecord;
    protected RetrieveControlRecordType controlRecord;
    public RetrieveAdminRecordType getAdministrativeRecord() {
        return administrativeRecord;
    }
    public void setAdministrativeRecord(RetrieveAdminRecordType value) {
        this.administrativeRecord = value;
    }
    public RetrieveControlRecordType getControlRecord() {
        return controlRecord;
    }
    public void setControlRecord(RetrieveControlRecordType value) {
        this.controlRecord = value;
    }
}

两个版本的AdminstrativeRecord和ControlRecord也有类似的结构。

2 个答案:

答案 0 :(得分:0)

我想我错过了一些东西。你考虑过抽象的父类吗?

答案 1 :(得分:0)

我将创建一个界面来描述两个类都尊重的合同。

public interface DocumentHeaderType {
    public AdminRecordType getAdminRecord() ;

    public ControlRecordType getControlRecord() ;
}

下一步是通过抽象类提供基本实现。

public abstract class AbstractDocumentHeaderType implements DocumentHeaderType {
    private AdminRecordType adminRecord ;
    private ControlRecordType controlRecord ;

    public AdminRecordType getAdminRecord() {
        return adminRecord ;
    }
    public ControlRecordType getControlRecord() {
        return controlRecord ;
    }
    // setters ...
}

现在您只需要使用CreateDocumentRecordHeaderType和RetrieveDocumentRecordHeaderType来扩展抽象类。

public class CreateDocumentHeaderType extends AbstractDocumentHeaderType {
    // we inherit the getters and setters, we are pretty much set
}

现在,填充值的方法

public void populateDocumentRequest(AbstractDocumentHeaderType holder) {
    holder.setAdminRecord(...);
    holder.setControlRecord(...) ;
}

希望这有帮助。