是否违反Clean Code在这样的构造函数中调用init方法

hap*_*s10 13 java oop coding-style

我在下面的代码中关注的是构造函数的参数实际上并没有直接映射到类的实例字段.实例字段从参数中获取值,并且我正在使用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);
}
...
Run Code Online (Sandbox Code Playgroud)

PS:对不起,如果这看起来像个愚蠢的问题; 我的代码将由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;
}
Run Code Online (Sandbox Code Playgroud)

WRe*_*ach 12

构造函数包含非平凡代码通常是个坏主意.通常,构造函数最多应将提供的值分配给字段.如果对象需要复杂的初始化,那么初始化应该是另一个类(通常是工厂)的责任.请参阅MiškoHevery关于此主题的精彩文章:缺陷:构造函数执行实际工作.