在构造函数中调用 init 方法是否违反了 Clean Code,如下所示
2022-09-04 02:17:24
我在下面的代码中担心的是,构造函数的参数实际上并没有直接映射到类的实例字段。实例字段从参数派生值,我为其使用了 initalize 方法。此外,我做了一些事情,以便创建的对象可以直接在后面的代码中使用,例如调用drawBoundaries()。我觉得它正在做抽象意义上的创建(初始化)Canvas 的含义。
我的构造函数是否执行了太多操作?如果我添加方法从外部显式调用构造函数中的内容,那将是错误的。请让我知道你的看法。
public class Canvas {
private int numberOfRows;
private int numberOfColumns;
private final List<Cell> listOfCells = new LinkedList<Cell>();
public Canvas(ParsedCells seedPatternCells) {
initalizeCanvas(seedPatternCells);
}
private void initalizeCanvas(ParsedCells seedPatternCells) {
setNumberOfRowsAndColumnsBasedOnSeedPatten(seedPatternCells);
drawBoundaries();
placeSeedPatternCellsOnCanvas(seedPatternCells);
}
...
P.S.:抱歉,如果这看起来像一个愚蠢的问题;我的代码将由OOP大师审查,我只是担心:-0
编辑:
我读到一些关于 initalizeCanvas() 中的方法被覆盖的担忧 - 幸运的是,这些方法是私有的,不调用任何其他方法。
无论如何,在对网络进行进一步研究之后,我开始更喜欢这个...我希望你们同意!!??
public class Canvas {
private int numberOfRows;
private int numberOfColumns;
private final List<Cell> listOfCells = new LinkedList<Cell>();
private Canvas() {
}
public static Canvas newInstance(ParsedCells seedPatternCells) {
Canvas canvas = new Canvas();
canvas.setNumberOfRowsAndColumnsBasedOnSeedPatten(seedPatternCells);
canvas.drawBoundaries();
canvas.placeSeedPatternCellsOnCanvas(seedPatternCells);
return canvas;
}