??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AⅤ永久无码精品AA,亚洲va在线va天堂va不卡下载,亚洲成AV人影片在线观看 http://m.tkk7.com/phoenixtoday/category/25066.html每天q步一点点Q努力做好自?/description>zh-cn Wed, 09 Jan 2008 22:55:45 GMT Wed, 09 Jan 2008 22:55:45 GMT 60 一炚w构心?/title> http://m.tkk7.com/phoenixtoday/archive/2008/01/08/173844.html朱雀 朱雀 Tue, 08 Jan 2008 15:56:00 GMT http://m.tkk7.com/phoenixtoday/archive/2008/01/08/173844.html http://m.tkk7.com/phoenixtoday/comments/173844.html http://m.tkk7.com/phoenixtoday/archive/2008/01/08/173844.html#Feedback 0 http://m.tkk7.com/phoenixtoday/comments/commentRss/173844.html http://m.tkk7.com/phoenixtoday/services/trackbacks/173844.html
重构E序的目的,不是因ؓE序不能用才要你去重构,重构的目的是因ؓ一、你的代码,被h看的ơ数Q远比它用到的次数多Q二、重构有利于你发现问题,让你的程序结构优化,因此可复用性更强,遵守了知识的唯一性,DRY 原则Q三、如果你要改动这D代码,那么先重构,使得你的代码好改Q这实际是在Z的未来减工作量Q而且一D优U的代码,带给你的价|q比你每ơ都要Ctrl+CQCtrl+V 大得多?br />
写代码,要让你的代码W一ơ呈现在别h面前的时候,像读p一般,那么你的代码功底是够了。你的代码就可以UC你最好的文档了,其余什么文,大可不必Q?br />
Z昨天的经验,我新ȝ了两条:
一、经怋用重构方法extract method 的hQ会发现QL可以省掉一些时变量。这是好事,但这可能会造成如下的结果:
method_one(method_two(method_three(method_four())))
也就是说Q很可能会导致这U长串的嵌套Q导致程序可L的下降Q人看的晕头{向。那么如何解军_Q其实是一个度的问题。我l自己定了一个规矩,临界Ҏ三个函数q样U联hQ如果超q三个,我就它们拆开。比如说上面q个例子,我会拆成Q?br />
arg = method_three(method(four));
method_one(method_two(arg));
虽然费了一个时变量,但是q样可以让Z眼看懂我的意思,可读性提升,修改h自然也会Ҏ些?br />
二、写qJava I/O 的hQ肯定看到过q样的程序:
Reader in = null;
Writer out = null;
try
{
in = new InputStreamReader(socket.getInputStream(),"utf8");
out = new OutputStreamWriter(socket.getOutputStream(),"utf8");
/**
* some TODOs here
*
**/
}catch(IOException ioe)
{
System.err.println("error message");
ioe.printStackTrace();
}
finally
{
try
{
if(in != null)
in.close();
if(out != null)
out.close();
}catch(IOException ioe2)
{
System.err.println("some error message");
ioe2.printStackTrace();
}
}
怎么说呢Q这D代码看上去Q其实是够好了,其实不重构也是可以的。也许我偏执吧,我认为它不够好,因ؓQ首先,大段的try catch 的确会捕获异常,但是q段代码臛_有好几段是会独立抛出异常的,q里包含了四个IO 实例的创建和销毁,q四D代码如果出错都会抛出异常,那么你捕L到底是哪个呢Q其ơ,没有把功能段合理分开Q这D代码的逻辑功能实际上是两个Q一个是读,一个是写,那么合ƈ在一P首先序很ؕQ其ơ容易让阅读的h产生困惑Q从而造成代码可读性差。我是这样做的:
private void writeFile(String fileName, String outStr)
{
Writer writer = null;
try
{
writer = new OutputStreamWriter(new FileOutputStream(fileName),
"utf8");
}
catch (UnsupportedEncodingException e)
{
System.err.println("不支持的~码方式");
e.printStackTrace();
}
catch (FileNotFoundException e)
{
System.err.println("初始化文件失败,或\径不存在Q? + fileName);
e.printStackTrace();
}
try
{
writer.write(outStr);
writer.flush();
}
catch (IOException e)
{
System.err.println("写文件失?);
e.printStackTrace();
}
finally
{
try
{
if(writer != null)
writer.close();
}
catch (IOException e)
{
System.err.println("关闭文gp|");
e.printStackTrace();
}
}
}
cM的,也将ȝ逻辑独立抽出来,虽然Q这不但没代码的量减少Q却增加了很多try catch 模块Q不q逻辑上很完整Q而且发挥了每个try catch 的最佛_效。我把它起名曎ͼ我个人的偏执情节吧?br />
CQ要睡觉了,本来q想代码从最初模P到最后模Lq程复述一遍,改天有机会再__֍都已l说了。嘿?br />
]]>
վ֩ģ壺
ޱһ |
͵ۺ |
һۺ߲ |
㶮ַѹ |
˳վۿ |
99ѹۿ |
Ƶ߹ۿ |
պĻƵ |
aƬ߹ۿapp
|
Ļ |
þþþѿӰƬ |
ɫͼ.com |
ĻѸ |
һĿ鶹 |
ѿƵվ |
avav |
ѿƬѲ |
jzzjzzѹۿƬ |
Ļþ2017 |
þݾƷ38 |
˸߹ۿ |
ˬִ̼߳ |
˳Ƶ߹ۿ |
ŷƷһ |
19žžڵվ |
ձ |
ҹþþþþ |
ƷĻ |
Ʒվ |
ĻкƬ |
99þƷһ |
˿ҳ
|
йƷһëƬѲ |
ۺһ
|
岻Ƶ |
ĻþþƷ2021 |
պëƬѿ |
999zyz**վëƬ |
bvվ
|
Ʒר߹ۿ
|
ƷAv߹ۿ |