对象构造函数做多少工作是合理的?它应该只是初始化字段而不是实际对数据执行任何操作,还是可以让它执行某些分析?
背景: 我正在编写一个类,负责解析HTML页面并根据解析的信息返回各种信息.类的设计使得类的构造函数执行解析,如果发生错误则抛出异常.初始化实例后,解析后的值无需通过访问器进行进一步处理即可使用.就像是:
public class Parser {
public Parser(final String html) throws ParsingException {
/* Parsing logic that sets private fields */
/* that throws an error if something is erroneous.*/
}
public int getNumOfWhatevers() { return private field; }
public String getOtherValue() { return other private field; }
}
Run Code Online (Sandbox Code Playgroud)
在设计课程后,我开始怀疑这是否是正确的OO练习.解析代码是否应放在void parseHtml()方法中,并且一旦调用此方法,访问者只返回有效值?我觉得好像我的实现是正确的,但我不禁觉得有些OO纯粹主义者可能因为某种原因发现它不正确,并且以下的实现会更好:
public class Parser {
public Parser(final String html) {
/* Remember html for later parsing. */
}
public void parseHtml() throws ParsingException {
/* Parsing logic …Run Code Online (Sandbox Code Playgroud) 如果我有一个三角形类,如下所示:
export default class Triangle {
sides: number[]
constructor(...sides: number[]) {
this.sides = sides
}
kind() {
// returns type of triangle
{
}
Run Code Online (Sandbox Code Playgroud)
如果传入构造函数的边没有创建真正的三角形,那么在创建类时(例如在构造函数中)还是在调用函数时抛出错误更好?
有这个答案,它说在 Java 中没问题,我确定它在 TypeScript 中有效。我只是想知道是否有关于 OOP 和 TypeScript 的“最佳实践”。