`
lovelimx
  • 浏览: 20524 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

代码重构初探

UI 
阅读更多

提问人:你看看那段代码,如果让你优化,你会怎么做?

 

 

	@Override
	protected void setTotalUIState(int intOpType) throws Exception {
		super.setTotalUIState(intOpType);
		if (!isSelfMake()) {// 如果不为自制单据

			ButtonObject btnObj = null;// 按钮对象
			btnObj = getButtonManager().getButton(IBillButton.CopyLine);
			if (btnObj != null)
				btnObj.setEnabled(!isSelfMake());// 设置复制行不可用

			btnObj = getButtonManager().getButton(IBillButton.PasteLine);
			if (btnObj != null)
				btnObj.setEnabled(!isSelfMake());// 不为空,设置粘贴行不可用

			updateButtons();// 更新当前按钮栏上的所有按钮
		}

	}

 之前准备的时候,都是深入了解各大功能的代码实现,对于这个界面的UI类代码,也顶多是浏览一下,能懂就懂,认真思考还是不懂的代码就放过,所以对于这个提问,对我来说还是相当的吃惊的。当时我认真的把代码看了一遍,发现在外层判断是否自制单据后,在里层还做了两次的判断,完全没有必要多次一举。所以灵机一动直接把里层的判断干掉。代码成了这个样子。

 

@Override
	protected void setTotalUIState(int intOpType) throws Exception {
		super.setTotalUIState(intOpType);
		if (!isSelfMake()) {// 如果不为自制单据

			ButtonObject btnObj = null;// 按钮对象
			btnObj = getButtonManager().getButton(IBillButton.CopyLine);
			if (btnObj != null)
				btnObj.setEnabled(false);// 设置复制行不可用

			btnObj = getButtonManager().getButton(IBillButton.PasteLine);
			if (btnObj != null)
				btnObj.setEnabled(false);// 不为空,设置粘贴行不可用

			updateButtons();// 更新当前按钮栏上的所有按钮
		}

	}
 

但是当时正值正午十二点左右,我饿的头昏眼花,智商降低到零下两百五,思考不来,是否可以确定把判断函数换成false就是正确无误的。所以,当时我的代码修改成的样子是这样的,比较保险。

 

 

 

@Override
	protected void setTotalUIState(int intOpType) throws Exception {
		super.setTotalUIState(intOpType);
		boolean isSelfMake = isSelfMake();
		if (isSelfMake) {// 如果不为自制单据

			ButtonObject btnObj = null;// 按钮对象
			btnObj = getButtonManager().getButton(IBillButton.CopyLine);
			if (btnObj != null)
				btnObj.setEnabled(isSelfMake);// 设置复制行不可用

			btnObj = getButtonManager().getButton(IBillButton.PasteLine);
			if (btnObj != null)
				btnObj.setEnabled(isSelfMake);// 不为空,设置粘贴行不可用

			updateButtons();// 更新当前按钮栏上的所有按钮
		}

	}
 

 

 

提问人:你看if语句里面的代码有些地方是相似的,是否还可以抽象出一个方法出来?


当时我还没有重构的意识,更没有做过代码重构的事情,所以并不能很好的理解他们的意图,于是把那几行代码剪切出来放在一个自己新定义的函数里面,然后在原来的代码里调用这个方法。我想当时他们应该是要让我气急败坏了,一直恨铁不成钢的逼问着我,外层if语句里面那几行代码不是很相似么?我们抽象出方法的目的是什么?虽然这会儿我都答对了,可是我还是不能做出他们想要的结果。直到那位长发飘飘的大哥指着银屏上的代码问我如下几行代码有那些不同的地方的时候,我才恍然大悟。


	ButtonObject btnObj = null;// 按钮对象
	btnObj = getButtonManager().getButton(IBillButton.CopyLine);
	if (btnObj != null)
	btnObj.setEnabled(isSelfMake);// 设置复制行不可用

	btnObj = getButtonManager().getButton(IBillButton.PasteLine);
	if (btnObj != null)
	btnObj.setEnabled(isSelfMake);// 不为空,设置粘贴行不可用
 

最后我顿悟了,代码应该是下面的样子,不过当时现场,他一句这个也过的时候,我已经没有机会当场写给他们看了。
	@Override
	protected void setTotalUIState(int intOpType) throws Exception {
		super.setTotalUIState(intOpType);
		if (!isSelfMake()) {// 如果不为自制单据
			setButtonsEnabled(IBillButton.CopyLine);
			setButtonsEnabled(IBillButton.PasteLine);
			updateButtons();// 更新当前按钮栏上的所有按钮
		}
	}

	private void setButtonsEnabled(int billButton) {
		ButtonObject btnObj = null;// 按钮对象
		btnObj = getButtonManager().getButton(billButton);
		if (btnObj != null) {
			btnObj.setEnabled(false);
		}
	}
 

 

分享到:
评论

相关推荐

    基于MVC的Struts框架初探

    ### 基于MVC的Struts框架初探:深入解析与应用 #### 引言:框架的意义与必要性 在JavaWeb应用的早期发展阶段,JSP文件扮演着多重角色,包括业务逻辑处理、控制流程管理以及HTML页面的生成。这种高度耦合的设计导致...

    物联网专业的Java课程改革初探.pdf

    物联网专业的Java课程改革初探 本文探讨了物联网专业的Java课程改革,旨在解决当前Java课程教学中存在的问题,并提出了改革的思路和目标。改革思路分为三个方面:教师角色转变、教学内容项目化改造、教学过程的三个...

    《C语言程序设计》教学改革初探 (1).pdf

    《C语言程序设计》教学改革初探的文章着重讨论了如何改进C语言的教学方式,以应对学生普遍感到困难和教学效果不理想的现状。文章指出,C语言因其强大的功能、灵活性和良好的移植性,在理工科学科中作为必修的基础...

    .net线程、事件资料学习包

    而重构是对代码结构的改进,旨在提高代码的可读性和可维护性,而不改变其外部行为。通过重构,可以使得代码更易于理解和测试,降低长期维护的成本。 最后,`重构OOP工厂模式.rar`可能是关于如何在实际项目中应用...

    CS_Primary_tutorial.rar_DCT CS 图像_DCT稀疏_cs tutorial_分块DCT和OMP_稀疏

    《CS压缩传感初探:DCT与稀疏重构》 在信息技术领域,数据压缩是至关重要的环节,尤其是在图像处理和信号传输中。本教程聚焦于压缩传感(CS)这一概念,通过实例代码深入探讨了DCT(离散余弦变换)在图像压缩中的...

    PHP单元测试利器 PHPUNIT初探第1/2页

    单元测试不但可以在一定程度上解决上述头疼的问题,而且能让代码变的容易维护,还可以能让你更多地对代码进行重构。  一旦你编写好单元测试用例,当你需要修改你的代码时,你要做的事情就是重新运行你的单元测试...

    java实现简单投票程序

    MyEclipse作为开发环境,提供了丰富的功能,包括代码编辑、调试、重构以及项目管理等。开发者可以使用它来组织源代码,构建和运行程序,并进行单元测试。 在解压后的文件“TP”中,很可能包含了该项目的所有源代码...

    用.net编写的未完善棋盘

    同时,代码重构和单元测试也是保证代码质量的重要手段,可以使用Moq或NUnit等库来辅助进行。 虽然这个棋盘项目未完善,但它为初级.NET学习者提供了一个很好的实践平台。通过此项目,学习者可以深入理解.NET框架的...

    职业院校电商专业网页设计课程教学实践初探--以缙云县职业中等专业学校为例.pdf

    缙云县职业中等专业学校在教学实践中,注重教学内容与本地经济发展的结合,根据职业教育以就业为导向的方针,重构了课程知识结构,增强了课程的实用性。学校将电商职业岗位任职能力要求作为目标定位,通过静态网页...

    web开发大礼包

    - 文档《从LiveJournal后台发展看大规模网站性能优化方法》和其续篇深入分析了LiveJournal如何通过数据库优化、缓存策略、负载均衡以及代码重构来处理大规模用户流量。这涉及到数据库查询优化、分布式缓存如...

    Ext JS 4 First Look

    3. **数据管理重构**:根据新版本的数据包概念,重新设计数据流和数据处理逻辑。 4. **主题和样式更新**:利用新的主题引擎,更新应用程序的视觉效果,保持用户界面的一致性和吸引力。 5. **性能调优**:结合Ext JS ...

    深入浅出android

    - **重构程序(BMI03)**:介绍了代码重构的重要性,以及如何优化现有代码结构,提高代码质量和可维护性。 - **加入对话框(Dialog)**:讲解了如何在应用中加入弹出对话框,以增强用户交互和信息提示功能。 - **查看...

    c#写的后台管理程序

    为提高代码质量,应遵循良好的编程规范,学习设计模式,以及进行代码审查和重构。 总之,C#凭借其强大的特性和丰富的开发工具,是构建后台管理程序的理想选择。初学者可以通过学习上述知识点,逐步提升自己的编程...

    SpringBlade快速开发手册

    SpringBlade是一个基于SpringCloud微服务架构的企业级解决方案,它由一个商业级项目升级优化而来,采用Java 8 API重构业务代码,并遵循阿里巴巴编码规范。SpringBlade使用的核心技术包括SpringBoot、SpringCloud ...

    架构文章集合,搜索引擎,系统可伸缩性

    文档可能阐述了如何解决扩展性问题、如何重构代码以适应变化以及在分布式环境中遇到的挑战。 10. **淘宝网架构解密淘宝网的开源架构**:淘宝作为中国最大的电商平台,其架构设计极具参考价值。文档可能涵盖了开源...

Global site tag (gtag.js) - Google Analytics