良好的软件设计实践

时间:2013-08-14 08:34:18

标签: java oop inheritance software-design

我有一个大类,用于应用程序的用户界面。它提供大约20个模块。对于目前只有一个模块,我需要Label上不同的数字形式。形成的应用程序只是一行源代码。可以通过使用boolean标志变量或应用inheritance来完成案例的分离:

通过布尔标志变量:

class MyClass{

    private boolean isYear;
    ...

    public setValue(){
    ...

    if(!isYear)
     doFormat();

    ...
    }

}

变量isYear当然是外部设置,当模块需要年度价值时。

通过应用继承,我必须创建一个派生自MyClass的新类,即MyYearClass,并仅覆盖方法setValue()。我认为在OO编程中推荐使用第二种方法,但我也听到过这样的观点:在这种情况下,它会使代码变得复杂,更模糊​​,更不整洁,而且当只需要一行代码时,它似乎通常是一种矫枉过正改变。你认为什么方法值得推荐?

4 个答案:

答案 0 :(得分:0)

一如既往,这取决于。它现在可以是一行但可能更晚一些。我同意过度设计你的代码是不好的,但如果你觉得当前的设计会改变(通常是这样),你可以在这里和那里使用一个简单的设计模式。对于您的问题(稍后描述),我相信您可以创建一个简单的Factory并让您的工厂返回您需要的MyClass子类之一。

答案 1 :(得分:0)

良好的设计实践将支持第二种方法(继承),因为从长远来看它更容易管理。当您开始向公共类添加特定代码时,您将打开一堆蠕虫。也许不是你,但是在你之后工作的开发人员会添加另一个功能,而同一个类的另一个功能然后支持就变成了一场噩梦。

让我更担心的是你的“我有一个大班级”的报价。好的设计原则会告诉你将它分开。

如果你的班级有超过1000行,那么它就是重构特定功能的好选择。

答案 2 :(得分:0)

第二种方法通常更好。但在你的情况下,你有一个简单逻辑的小班。如果你知道你要改变这个课程并且它会变得更大更复杂,那么现在拆分它。否则你可能会保持原样,如果你认为课程变得太复杂,可以推迟重构以备将来使用。相反,请关注应用程序的其他部分。

答案 3 :(得分:0)

我认为第二种方法是最佳做法。这似乎有点多余,但最好尽可能保持编程模块化。试想一下,如果其他人正在使用您的代码,或者您以后使用它并且无法完全记住MyClass如何工作,但您想要做的就是使用MyYearClass的功能。