java继承有什么用

实际在项目中用到的,一个简单的场景。

因为这个简单的修改,把原来很糟糕的代码进行了很好的重构。

好处是数据库领域模型不需要知道实际是什么组件的配置,只需要引用父类。实际这个组件配置的校验自需要放在校验层,起到解耦合的作用。

配置的父类

public class ConfigureDefinition implements Serializable {
    private final static Logger LOGGER = LoggerFactory.getLogger(ConfigureDefinition.class);
    public static String valicateErrorMessage;

    public TaskNodeDefinition addConfiguration(Object json,TaskNodeDefinition target){
        LOGGER.info("--->ConfigureDefinition addConfiguration() the [task node]<taskNode:{}>", target.toString());
        return target;
    }

    public TaskNodeDefinition processConfiguration(TaskNodeDefinition taskNodeDefinition) throws Exception{
        LOGGER.info("--->ConfigureDefinition processConfiguration() the [task node]<taskNode:{}>", taskNodeDefinition.toString());
        validate(taskNodeDefinition);
        return taskNodeDefinition;
    }

    public boolean validate(TaskNodeDefinition taskNodeDefinition) {
        LOGGER.info("--->ConfigureDefinition validate() the [task node]<taskNode:{}>", taskNodeDefinition.toString());
        return true;
    }

    public String validateReturnMessage(TaskNodeDefinition taskNodeDefinition){
        LOGGER.info("--->ConfigureDefinition validateReturnMessage() the [task node]<taskNode:{}>", taskNodeDefinition.toString());
        validate(taskNodeDefinition);
        return valicateErrorMessage;
    }

}

不同的子类有各自的业务逻辑,如果没有就使用父类的逻辑

public class HttpRequestConfig extends ConfigureDefinition {
    private final static Logger LOGGER = LoggerFactory.getLogger(HttpRequestConfig.class);


    @Override
    public TaskNodeDefinition addConfiguration(Object json,TaskNodeDefinition target){
        LOGGER.info("---> HttpRequestConfig addConfiguration() the [HTTP Request]<taskNode:{}> <{}>", target.getTaskId(),json);
        JSONObject jsonObject= JSONObject.fromObject(json);
        HttpRequestDefinition httpRequestDefinition=(HttpRequestDefinition)JSONObject.toBean(jsonObject, HttpRequestDefinition.class);
        target.setConfigure(httpRequestDefinition);
        return target;
    }

    @Override
    public TaskNodeDefinition processConfiguration(TaskNodeDefinition taskNodeDefinition) throws Exception {
        return super.processConfiguration(taskNodeDefinition);
    }

    @Override
    public boolean validate(TaskNodeDefinition taskNodeDefinition) {
        LOGGER.info("--->HttpRequestConfig validate() the [HTTP Request]<taskNode:{}>", taskNodeDefinition.toString());
        if (Objects.isNull(taskNodeDefinition.getConfigure())
                || Objects.isNull(taskNodeDefinition.getConfigure())
                || Objects.isNull(((HttpRequestDefinition)taskNodeDefinition.getConfigure()).getGeneral())
                || StringUtils.isAnyBlank(((HttpRequestDefinition)taskNodeDefinition.getConfigure()).getGeneral().getMethod(),
                ((HttpRequestDefinition)taskNodeDefinition.getConfigure()).getGeneral().getPath(),
                ((HttpRequestDefinition)taskNodeDefinition.getConfigure()).getGeneral().getAccessKeyId())) {
            valicateErrorMessage="You must specify a value in the following fields: method、path、accessKeyId";
            return false;
        }
        valicateErrorMessage=null;
        return true;
    }

    @Override
    public String validateReturnMessage(TaskNodeDefinition taskNodeDefinition){
        LOGGER.info("--->HttpRequestConfig validateReturnMessage() the [HTTP Request]<taskNode:{}>", taskNodeDefinition.toString());
        validate(taskNodeDefinition);
        return valicateErrorMessage;
    }

数据库层领域模型

public class HttpRequestDefinition extends HttpRequestConfig implements Serializable {
    private GeneralDefinition general;
    private RequestDefinition request;
    private ResponseDefinition response;

    public GeneralDefinition getGeneral() {
        return general;
    }

    public void setGeneral(GeneralDefinition general) {
        this.general = general;
    }

    public RequestDefinition getRequest() {
        return request;
    }

    public void setRequest(RequestDefinition request) {
        this.request = request;
    }

    public ResponseDefinition getResponse() {
        return response;
    }

    public void setResponse(ResponseDefinition response) {
        this.response = response;
    }
}

转载于:https://my.oschina.net/sunnywu/blog/3070213

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值