Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据最小原则,软件架构_Java_Design Patterns_Architecture - Fatal编程技术网

Java 数据最小原则,软件架构

Java 数据最小原则,软件架构,java,design-patterns,architecture,Java,Design Patterns,Architecture,我有一个一般性问题,没有找到任何信息 我记得有一个原则,你应该只传递数据, 这是执行的目的所需要的 但我遇到了以下问题: 我在java中有多个可调用项: public class CallableA implements Callable<Boolean> { private CallableData data; public CallableA(CallableData data) { this.data = data; } } public class Callable

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

我记得有一个原则,你应该只传递数据, 这是执行的目的所需要的

但我遇到了以下问题:

我在java中有多个可调用项:

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;
    }
}
公共类CallableA实现了Callable{
私有可调用数据;
公共CallableA(CallableData数据){
这个数据=数据;
}
}
公共类CallableB实现了Callable{
私有可调用数据;
公共CallableB(CallableData数据){
这个数据=数据;
}
}
公共类CallableC实现了Callable{
私有可调用数据;
公共CallableC(CallableData数据){
这个数据=数据;
}
}
在我看来,最好将相同的类CallableData(如上面所示)传递给所有Callables,因此我不需要指定许多数据类。 每个Callable都使用它需要的CallableData中的数据

或者建议为每个可调用对象定义自己的数据类 (CallableDataA、CallableDataB、CallableDataC)

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


最好的方法是什么?

除了行为之外,这些可调用类都有共同点。因此,最好的方法是使用抽象并重用其中的超类

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

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

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

    protected CallableData getData() {
        return data;
    }
}

如果三个类都包含相同的数据,为什么要创建它们?在我看来,这里只需要两个类。如果它最终得到6个字段的
CallableData
,并且每个
Callable
使用2个不同的(像
CallabkeA
使用
field1
field2
CallableB
使用
field3
field4
等等,你最好创建单独的类,而不是一个。是的,假设CallableData有6个字段,CallableA使用field1和field2 CallableB使用field3和field4,CallableC使用field5。)和字段6。但当所有可调用对象都使用第7个字段时,我该怎么办?@ernest_k,因为每个可调用对象都有不同的逻辑,并且CallableData中的某些属性是共享的,而某些属性不是共享的。所有(或至少几个)使用的字段可以移动到共享该公共字段的类的抽象超类中
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;
    }
}