将 class 分成两个不同的 class 是个好主意吗?

Is splitting a class in two different class a good idea?

对于一个项目,我需要从 Excel 个文件创建报告。

我有一个很大的设计问题,我自己无法解决,而且我还没有在网上找到解决方案。

这是我正在尝试做的事情:

  1. 读取 Excel 文件的内容
  2. 使用该内容初始化一个新报告class
  3. 盈利!

问题是我第一次写那个的时候,我把所有的东西都放在了我的报告中 class(我的意思是阅读文件、格式​​化字段等),最后我得到了一个很大的class.

我对此并不满意,所以我尝试做一些更好的事情并创建了一个 ReportReader class,其中包含我所有的阅读文件内容以及初始化报告 class 的吸气剂。这是个好主意,还是我应该坚持使用一个 class?

此外,在 ReportHeader 中创建一个 createReport 方法而不是使 public getter 可用是个好主意吗?

public class ReportReader {
    private final File file;
    private final Sheet sheet;

    public ReportReader(File file) throws InvalidFormatException
        , IOException {
     
    }

    public ArrayList<String> getFields() {

    }

    private String formatField(String input) {

    }

    public String getName() {
    
    }

    public Cell[][] getContent() {

    }

    public String getType() throws IOException {

    }
}

和:

public class Report {
    private String name;
    private String type;
    private ArrayList<String> fields;
    private Cell[][] content;
    
    public Report(String name, String type, ArrayList<String> fields, 
        Cell[][] content) throws IOException {
    
    }
    
    public void saveFieldsModel() throws IOException {
       
    }
    
    public String getFieldsAsCsv() {
    
    }
}

是的,为每个职责创建一个 class 是很好的做法。是SOLID. There is a great post about clarifying of single responsibility.

的原则之一

could it be a good idea to create a createReport method inside ReportHeader instead of making public getters available?

看起来 CreateReportReportHeader 无关。 Class Report 更适合 CreateReport() 方法。另外,如果你将方法 CreateReport() 放在 Report class 中,那么你可以像 Create 那样调用它,而不是 CreateReport:

public class Report {
    public void Create(){}
}

然后在用户 class 中它看起来像这样:

Report report = new Report();
report.Create(); // not "CreateReport()" :)