首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据最小化原则,软件架构

数据最小化原则,软件架构
EN

Stack Overflow用户
提问于 2018-08-04 21:51:47
回答 1查看 53关注 0票数 0

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

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

但我遇到了以下问题:

我在java中有多个Callables:

代码语言:javascript
复制
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都使用它需要的来自CallableData的数据。

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

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

做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-04 23:21:14

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

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

代码语言:javascript
复制
public abstract class AbstractCallable implements Callable<Boolean> {
    private CallableData data;

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

    protected CallableData getData() {
        return data;
    }
}

该抽象类承载了可调用类的共同之处,这样每个具体类将只有其自己的call逻辑的特定实现(所有三个类看起来都相似,但不会有重复的代码)

下面是一个实现:

代码语言:javascript
复制
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;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51686267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档