数据最少原则,软件体系结构

时间:2018-08-04 13:51:47

标签: java design-patterns architecture

我有一个一般性问题,没有找到任何信息。

我记得有一个原则,即只应传递数据, 这是执行所需的。

但是我遇到了以下问题:

我在Java中有多个Callables:

public class CallableA implements Callable<Boolean> {
private CallableData data;
public CallableA(CallableData data) {
this.data = data;
    }
}

public class CallableB implements Callable<Boolean> {
private CallableData data;
public CallableB(CallableData data) {
this.data = data;
    }
}

public class CallableC implements Callable<Boolean> {
private CallableData data;
public CallableC(CallableData data) {
this.data = data;
    }
}

我认为最好将相同的CallableData类(如您在上面看到的)传递给所有Callables,所以我不需要指定许多数据类。 每个Callable都会使用其所需的CallableData中的数据。

或者建议为每个Callable定义自己的数据类 (CallableDataA,CallableDataB,CallableDataC)

但是例如当CallableA和CallableB需要相同的属性时, 在CallableDataA和CallableDataB中是多余的信息。

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

除了行为外,这些可调用类具有所有共同点。因此,最好的方法是使用抽象并在它们之间重用超类。

因此,我将创建一个抽象类,并对其进行扩展:

public abstract class AbstractCallable implements Callable<Boolean> {
    private CallableData data;

    protected AbstractCallable(CallableData data) {
        this.data = data;
    }

    protected CallableData getData() {
        return data;
    }
}

该抽象类具有可调用类之间的共同点,因此每个具体类将仅具有其自己的call逻辑的特定实现(这三个类看起来都相似,但不会重复)代码)

这里是一种实现方式:

public class CallableA extends AbstractCallable {
    public CallableA(CallableData data) {
        super(data);
    }

    @Override
    public Boolean call() throws Exception {
        CallableData d = this.getData();

        //perform CallableA logic

        return null;
    }
}