关于GUI代码,要记住的是它是事件驱动的,而事件驱动的代码总是会出现大量随机组织的事件处理程序。当您尝试将非事件驱动的代码插入类时,它会变得非常混乱。当然,它具有为事件处理程序提供支持的外观,并且您可以保持事件处理程序的大小,但是所有这些额外的支持代码浮动使您的GUI源代码显得肿且混乱。
那么,您该如何处理?如何使事情更容易重构?好吧,我首先将重构的定义从偶尔执行的工作更改为在编写代码时不断进行的工作。为什么?因为您希望重构使您能够更轻松地修改代码,而不是相反。我不仅在这里要求您更改语义,而且还要求您进行一些心理健美操以便以不同的方式查看您的代码。
我发现我最常用的三种重构技术是Rename,Extract Method和Extract Class。如果我从未学习过其他任何重构,那么这三者仍然可以使我保持代码的清洁和结构化,并且从您的问题的内容来看,我觉得您很可能会发现自己几乎在不断地使用相同的三种重构。为了使您的GUI代码保持简洁。
您可以将世界上最好的GUI和业务逻辑分离,而GUI代码仍然看起来像是在其中部引爆了一个代码矿。我的建议是,有一个或两个以上的类来帮助您正确管理GUI并没有什么害处,而且如果您应用MVC模式,则不必一定是View类-尽管经常会发现中介类与您的观点如此相似,以至于您经常会感到为方便起见将它们合并的冲动。我对此的看法是,添加额外的特定于GUI的层来管理所有可视逻辑并没有什么害处,但是您可能想要权衡这样做的收益和成本。
因此,我的建议是:
- 除了调用和定义GUI如何挂接到View(或中间层)之外,在GUI后面不执行任何操作。
- 不要试图将与视图相关的所有内容统统归类到一个类中,甚至不要在每个GUI窗口中将它归类为一个类,除非这样做对您有意义。您的替代方法是创建许多小的且易于管理的类来管理您的GUI逻辑。
- 当您的方法开始看起来比4-5行代码略大时,请检查这是否有必要,以及是否有可能提取一个或两个方法,以便使您的方法保持精简,即使这意味着一个类还有更多方法
- 如果您的类开始看起来真的很大,请先删除所有重复的功能,然后查看是否可以在逻辑上对方法进行分组,以便提取另一个或两个类。
- 考虑每次编写一行代码时进行重构。如果您可以使用一行代码,请查看是否可以对其进行重构以避免重复功能,或者使其更精简而不更改其行为。
- 接受不可避免的事实,即您将始终感到系统中的一个或另一个部分开始感到有些start肿,尤其是如果您在进行过程中忽略重构时。即使有了良好的代码库,您仍然会觉得自己还有更多可以做的事情。这就是编写软件的现实,您会发现自己总是觉得可以做得更好一些,因此您需要在做专业工作和镀金之间取得平衡。
- 接受您尝试保持代码清洁的代码越显得code肿的想法。