摘要:
现在有太多是文章讨论各种重构的技术,咱们就不谈了,我们就谈谈要怎么重构。
一谈到重构,大家大多认为是运用设计模式,来使你的代码看上去非常优雅。其实重构包括很多,一个变量名的修改、
代码格式的编排、分解一个大方法的等等都是属于重构的范畴。
我相信肯定有人和我一样,捧一本重构方面的书(《重构与模式》Joshua Kerievsky著,这本就不错),一劲的狂喊这样写代码太
漂亮;可是丢开书本,面对自己的代码一直寻找可以运用设计模式、需要重构的代码,最后发现一处可重构的都没。
写出优雅的代码,相信对于很多人来说一直是个瓶颈、很难去突破。不过突破后,你会发现你的世界变大了,犹如跳出井口的青蛙。
那我们到底才能写出那么优雅的代码呢。我们先说说,我们的重构误区吧。
误区:
1、从已有的代码寻找与书本中匹对一样或类似的场景。
2、在编写新代码时,脑子一直想着那几种模式,想去套用,一直想用上几个。
最终还是没什么好的消息,造成这样的原因是,你没真正的理解设计模式的运用场景、重构技术。
也许心里面会对自己说,这是项目比较小,没出现书本提到的那些场景。
其实重构你可以 阅读全文
摘要:
随着Ajax的流行,现在的项目使用Ajax已经很普遍了,可以说是大量的使用Ajax了。由于存在大量的Ajax请求,变得难于管理。于是我们经常统一请求,唯一页面或者唯一的入口。于是便有以下类似的代码:示例:一、创建抽象类AjaxComm。二、Factory类,根据用户请求的Comm命令,创建相应的类,并执行相应的操作。三、实现相应的命令类。 # 优点与缺点# +合并创建逻辑和实例化/配置选项。 +将客户代码与创建逻辑解耦。 -如果可以直接实例化,会使设计复杂化。 阅读全文
摘要:
当你学会用挑剔的眼光审视自己所写的代码时,将一段代码反复读上五六遍,每次都会找到新的问题。
重构,也就是对既有代码设计的改善,要求你首先知道什么样的代码需要改善。
最常见的设计问题都出自这样的代码:
1、重复代码。
2、代码过长。将一个厂方法分解为几个小方法,不但利于理解,而且能发现通常有很多方式能够使它们共享逻辑。
3、条件逻辑太复杂。
……
*重复。
*不清晰。
*复杂。
这些大原则当然对发现代码中何处需要改进有帮助。但是,许多程序员会感到这个列表太过含糊;他们不知道如何认出外表上不同代码重复,把握什么样的代码表达不算清晰,更难辨别简单代码和复杂代码。
Fowler和Beck为我们列出了存在代码坏味的12种情况。
阅读全文
摘要:
一个简单却富有生命力的故事——《谁动了我的奶酪》
一个连小学生都读得懂的小故事,但它却给我们留下了几个相当有意义、值得思考的问题。
阅读全文
摘要:
昨天碰到一个很奇怪的事情,在最近的一个项目有这样的一个需求,把上传的图片进行压缩,避免因图片过大而影响浏览速度。
代码也很简单三两句就可以实现了,但发现压缩后的图片,虽然有变小,但还不是很明显。
本来是一张大约800*700的图片(80kb),压缩到120*110左右的图片,大小应该在10kb以内,但我却发现压缩后的图片却有45kb。
有个别的图片压缩后反而比原来的更大,而且用网页打开也无法显示。
阅读全文
摘要:
蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)
算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。
阅读全文
摘要:
Ajax现在已经是相当流行的技术了,Ajax不仅是想服务器端发送消息,更重要的是无刷新的重载页面。
如果页面单纯的使用js来创建,要写大量的代码,而且不直观。
在asp.net中,其实我们可以创建用户自定义控件,通过Ajax请求返回用户自定义控件HTML
阅读全文
摘要:
怎么使用javascript实现类的功能
经过前段时间,学习《ajax完全自学手册》后,才知道javascript原来还可以这么写。
学过java,c#,vb的都知道类的概念,而类具有继承、封装、多态等功能。而javascript它不是面向对象语言,它是解释性语言。
但我们同样可以使用javascript来实现继承、多态。
Java实现类,有多种方法。
方法一:构造方法。
function coder()
{
this.name = ”小王”;
this.job = ”程序员”;
this.coding = function ()
{
alert(“我正在写代码”);
}
}
Exam: var coder=new coder();
Alert(coder.name);
Coder.coding();
阅读全文
摘要:
今天没事,测了一下insert into和insert into select的性能,没想到这两个性能差别这么大。使用insert into table(field, ...)values(value, ...),insert into table(field, ...)values(value, ...)...的情况使用insert into table(field, ...)select(va... 阅读全文