java - 数据最小原则、软件架构

标签 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(如上所示)传递给所有 Callable,因此我不需要指定许多数据类。 每个 Callable 使用它需要的 CallableData 中的数据。

或者建议为每个 Callable 定义自己的 Data 类 (可调用数据A,可调用数据B,可调用数据C)

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

最好的方法是什么?

最佳答案

除了行为之外,这些可调用类具有所有共同点。所以最好的方法是使用抽象并重用其中的父类(super class)。

所以我会创建一个抽象类并让每个类扩展它:

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;
    }
}

关于java - 数据最小原则、软件架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51686267/

相关文章:

wcf - Node.js 在 Microsoft/Azure/WCF/MVC 项目中适合什么位置?

java - 我们可以在 Java 的 Hashtable 中创建一对 (a,b) 作为值吗

java - jvm如何使用多核cpu资源?

java - 如果您已经知道树结构怎么办?复合模式有替代方案吗?

c# - 工厂模式数据库连接

java - 避免在不同上下文中多次实现同一方法

java - 复制并镜像通用路径

java - 组织.apache.spark.SparkException : Task not serializable - Passing RDD

c++ - 为什么 double 的值在分配后似乎发生了变化?

c# - 在应用程序服务中将域实体作为参数发送或将实体 ID 作为参数发送