将 class 分成两个不同的 class 是个好主意吗?
Is splitting a class in two different class a good idea?
对于一个项目,我需要从 Excel 个文件创建报告。
我有一个很大的设计问题,我自己无法解决,而且我还没有在网上找到解决方案。
这是我正在尝试做的事情:
- 读取 Excel 文件的内容
- 使用该内容初始化一个新报告class
- 盈利!
问题是我第一次写那个的时候,我把所有的东西都放在了我的报告中 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?
看起来 CreateReport
与 ReportHeader
无关。 Class Report
更适合 CreateReport()
方法。另外,如果你将方法 CreateReport()
放在 Report
class 中,那么你可以像 Create
那样调用它,而不是 CreateReport
:
public class Report {
public void Create(){}
}
然后在用户 class 中它看起来像这样:
Report report = new Report();
report.Create(); // not "CreateReport()" :)
对于一个项目,我需要从 Excel 个文件创建报告。
我有一个很大的设计问题,我自己无法解决,而且我还没有在网上找到解决方案。
这是我正在尝试做的事情:
- 读取 Excel 文件的内容
- 使用该内容初始化一个新报告class
- 盈利!
问题是我第一次写那个的时候,我把所有的东西都放在了我的报告中 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?
看起来 CreateReport
与 ReportHeader
无关。 Class Report
更适合 CreateReport()
方法。另外,如果你将方法 CreateReport()
放在 Report
class 中,那么你可以像 Create
那样调用它,而不是 CreateReport
:
public class Report {
public void Create(){}
}
然后在用户 class 中它看起来像这样:
Report report = new Report();
report.Create(); // not "CreateReport()" :)