【问题标题】:Agile-wise - what is the best way to change similar code (private class) [closed]敏捷 - 更改类似代码的最佳方法是什么(私人课程)[关闭]
【发布时间】:2014-09-01 05:46:00
【问题描述】:

看了很多关于敏捷开发的话题,我也是 Clean Code 的忠实粉丝,但是下面的代码让我毛骨悚然。它看起来像这样:

A类:

public class A{
    private B = new B();
}

B类:

private class B{
    private ArrayStore aS;
    //other private fields

    private Constructor(){
        as = new ArrayStore();
        //initializing other private fields
    }

    private void someMethod(ObjectX obj){
        //some code
        aS.delete(obj);
    }
}

我需要添加额外的声明 as.delete() 只有在发生特殊情况时才应该调用。也不想让if 不让代码更难。代码越简单——越好。所以我想到了这些解决方案:

  1. 由于B类违反了开闭原则,我将其字段和方法保护起来,并在新类中覆盖该方法,然后在A类中使用。

  2. 我将在 ObjectX 类中设置附加字段,该字段将建议何时应将其删除以及何时不应更改 B 类方法以调用附加方法(这将检查对象属性然后考虑将其删除)

你们有什么建议吗,伙计们?我的意思是我想知道在这种情况下当我想覆盖代码(这是私有的)时该怎么做,以及如何让它看起来有吸引力。

提前致谢!

【问题讨论】:

  • @Edi G. 非常感谢您让代码看起来更吸引人 - 您的编辑得到了认可! :)
  • 您可能会在 [代码审查](codereview.stackexchange.com) 上做得更好。这也没有什么敏捷的。敏捷是关于组织你的工作,除了团队应该定义自己的规则(这很可能是“不在乎”)这一事实之外,它并没有说明任何编码风格。
  • @nvoigt 感谢您的建议,看来我会更好地把它贴在那里。我可以以某种方式移动这个问题吗?抱歉问:-)

标签: java c# agile


【解决方案1】:

我需要添加应该调用 as.delete() 的附加语句 只有当某些特定的事情发生时。如果没有也不想做 使代码更加困难。代码越简单越好。

我想我不同意if 使代码变得太难并且会采用以下方法:

private void someMethod(ObjectX obj){
    //some code
    if (aNameThatDescribesTheUseCaseWhenToDelete()) {
       aS.delete(obj);
    }
}

private boolean aNameThatDescribesTheUseCaseWhenToDelete() {
    // logic to figure out whether delete is okay or not
}

我认为这就像 KISSy 一样。

如果确定何时删除的逻辑过于复杂,您可以考虑规则/谓词,但这可能是未来的事情。

【讨论】:

  • 感谢 jan 的回答!我也认为这可能是一个好方法,值得考虑。它仍然有两个问题:它改变了现有的实现,并通过添加 if(无论是在功能中还是创建新的)来增加一点复杂性。仍然可能很简单,这很好:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 2011-12-12
相关资源
最近更新 更多