gpt4 book ai didi

java - 像这样在构造函数中调用init方法是否违反了Clean Code

转载 作者:搜寻专家 更新时间:2023-10-30 19:58:36 25 4
gpt4 key购买 nike

我在下面的代码中担心的是构造函数的参数实际上并没有直接映射到类的实例字段。实例字段从参数派生值,我正在为其使用 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() 中的方法被覆盖的担忧——幸运的是这些方法是私有(private)的,不会调用任何其他方法。

无论如何,在对网络进行进一步研究之后,我开始更喜欢这个...我希望你们同意!!??

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;
}

最佳答案

构造函数包含重要代码通常不是一个好主意。通常,构造函数最多应将提供的值分配给字段。如果一个对象需要复杂的初始化,那么初始化应该由另一个类负责(通常是 factory )。请参阅 Miško Hevery 关于此主题的精彩文章:Flaw: Constructor does Real Work .

关于java - 像这样在构造函数中调用init方法是否违反了Clean Code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5764689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com