java - 拆分或不拆分类(在 Java 中)

标签 java oop

我有一个句子,在不同的阶段进行了分析。首先,我得到一些属性(比如 X、Y、Z):

public class AnalyzedSentence {
    private String X;
    private String Y;
    private String Z;

    public AnalyzedSentence(String sentence) {
        extractX();
        extractY();
        extractZ();
    }

    // getters, setters
}

然后,我使用这些属性进一步分析句子以获得另一个属性,比如“XYZ”,之后我创建了以下类:

public class FinalSentence {

    private AnalyzedSentence data;

    private String XYZ;

    public FinalSentence(String XYZ, AnalyzedSentence data) {
        this.data = data;
        this.XYZ = XYZ;
    }

    // getters, setters
}

工作流程是这样的:

public class SentenceAnalyzer {
    /// ...
    public FinalSentence analyze(String sentence) {
        AnalyzedSentence as = new AnalyzedSentence(sentence);  // every attribute of "as" can be calculated beforehand
        String XYZ = SpecialClass.extractXYZ(sentence, as); // extract XYZ (needs a special class), based on as
        return new FinalSentence(XYZ, as);
    }
}

或者,我可以只有一个类来保存所有信息,在属性被提取时填充它们,这可能会导致一些空结果。应该是这样的:

public class Sentence {

    private String X;
    private String Y;
    private String Z;    
    private String XYZ;

    public Sentence(String sentence) {
        extractX();
        extractY();
        extractZ();
    }

    public String getXYZ() {
        // with this design, this method can be called, even if XYZ was not extracted yet.
        // remember that XYZ cannot be extracted as X,Y,Z
    }

    public void setXYZ(...) {...}

    // getters, setters
}

我的问题是:首选哪种设计,为什么?如果还有更好的方法来完成我在这里尝试做的事情,我也很想听听。

最佳答案

我个人更喜欢第一种设计,即有两个类的设计。分析和结果之间的区别对我很有吸引力。我更喜欢将类视为责任的集合,而不是数据的集合,使用两个不同的类可以使每个类的责任更加明确。

关于java - 拆分或不拆分类(在 Java 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1149315/

相关文章:

java - JBoss Arquillian @InSequence 与 JUnit 4.12

java - 如何同时启动两个进程然后等待两个进程完成?

c++ - 处理包含动态分配成员的对象的 vector

java - 删除默认的 JButton 输入映射

java - Android:将变量传递给非 Activity 类

java - SPOJ "ACPC10A - What’ s Next”-错误答案

oop - 一个很好的面向对象类比

java - 类设计问题【可选实现】

class - ":"在 dart 的类构造函数中意味着什么?

java - 福勒的模式 : Dealing with table inheritance in a specific way