我有一个大类,用于应用程序的用户界面。它提供大约20个模块。对于目前只有一个模块,我需要Label
上不同的数字形式。形成的应用程序只是一行源代码。可以通过使用boolean
标志变量或应用inheritance
来完成案例的分离:
通过布尔标志变量:
class MyClass{
private boolean isYear;
...
public setValue(){
...
if(!isYear)
doFormat();
...
}
}
变量isYear
当然是外部设置,当模块需要年度价值时。
通过应用继承,我必须创建一个派生自MyClass
的新类,即MyYearClass
,并仅覆盖方法setValue()
。我认为在OO编程中推荐使用第二种方法,但我也听到过这样的观点:在这种情况下,它会使代码变得复杂,更模糊,更不整洁,而且当只需要一行代码时,它似乎通常是一种矫枉过正改变。你认为什么方法值得推荐?
答案 0 :(得分:0)
一如既往,这取决于。它现在可以是一行但可能更晚一些。我同意过度设计你的代码是不好的,但如果你觉得当前的设计会改变(通常是这样),你可以在这里和那里使用一个简单的设计模式。对于您的问题(稍后描述),我相信您可以创建一个简单的Factory
并让您的工厂返回您需要的MyClass
子类之一。
答案 1 :(得分:0)
良好的设计实践将支持第二种方法(继承),因为从长远来看它更容易管理。当您开始向公共类添加特定代码时,您将打开一堆蠕虫。也许不是你,但是在你之后工作的开发人员会添加另一个功能,而同一个类的另一个功能然后支持就变成了一场噩梦。
让我更担心的是你的“我有一个大班级”的报价。好的设计原则会告诉你将它分开。
如果你的班级有超过1000行,那么它就是重构特定功能的好选择。
答案 2 :(得分:0)
第二种方法通常更好。但在你的情况下,你有一个简单逻辑的小班。如果你知道你要改变这个课程并且它会变得更大更复杂,那么现在拆分它。否则你可能会保持原样,如果你认为课程变得太复杂,可以推迟重构以备将来使用。相反,请关注应用程序的其他部分。
答案 3 :(得分:0)
我认为第二种方法是最佳做法。这似乎有点多余,但最好尽可能保持编程模块化。试想一下,如果其他人正在使用您的代码,或者您以后使用它并且无法完全记住MyClass如何工作,但您想要做的就是使用MyYearClass的功能。