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

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

以下是我想做的:

  1. 读取Excel文件的内容
  2. 使用这些内容初始化一个新的报表类
  3. 利润

问题是,我第一次写这篇文章的时候,我把所有的东西都放在我的Report类中(我指的是读取文件、格式化字段等等),结果我得到了一个很大的类.

我对此并不满意,所以我try 做一些更好的事情,创建了一个ReportReader类,它包含我所有的阅读文件内容,还包含初始化Report类的getter.这是个好主意还是我应该坚持一门课?

另外,在ReportHeader中创建createReport方法,而不是让公共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() {
    
    }
}

推荐答案

是的,根据责任创建一个类是很好的实践.这是SOLID原则之一.有一篇关于clarifying of single responsibility的帖子很棒.

在ReportHeader中创建createReport方法,而不是让公共getter可用,这是一个好主意吗?

看起来CreateReportReportHeader没有关系.Report班更适合CreateReport()法.此外,如果将方法CreateReport()放在Report类中,那么可以像Create而不是CreateReport那样调用它:

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

然后在用户类中,它会如下所示:

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

Java相关问答推荐

ittext pdf延迟签名,签名无效

CAMEL 4中的SAXParseException

无法处理批处理侦听器中的反序列化异常

如何使用AWS CLI从S3存储桶中的所有对象中删除用户定义的元数据?

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

呈现文本和四舍五入矩形时出现的JavaFX窗格白色瑕疵

与不同顺序的组进行匹配,不重复组但分开

如何在EXCEL单元格中添加形状和文本

Jolt变换JSON数组问题

为什么当我创建Robot对象时,JavaFX引发IlLegalStateException异常?

Kotlin Val是否提供了与Java最终版相同的可见性保证?

如何在我的世界中为互动增加冷却时间?

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

使用While循环打印素数,无法正常工作

如何使用Java ZoneID的区域设置?

升级版本后出现非法访问错误

Android上的SQLite:Android.database.SQLite.SQLiteReadOnlyDatabaseException:try 写入只读数据库(代码1032 SQLite_readonly_DBMOVED)

using case default on switch语句返回;预览特征切换中的模式匹配仅在源级别20及以上的情况下可用;

如何转换Vector<;对象>;转换为int?

如何使 JavaFx 中的表视图响应式?