Welcome

首页 / 软件开发 / .NET编程技术 / 分开变与不变的代码

分开变与不变的代码2012-01-26 blacktear 在处理文件时,我们希望写出的代码是健壮的。如果一个长时间运行的文件处理程序对文件的操作没有做到健壮性就会出现一些问题。

比如一个HTTP服务器,它主要是把文件打开然后读取其中的内容,发送到请求者。如果一旦网络连接出问题,从而导致正在传输的文件没有关闭,那么想修改这个文件的内容我们只能重启这个HTTP服务器了。

为了写出健壮的文件处理代码,一般我们都会用到try-catch-finally语句块:

1FileStream file = null;2try3{4  file = new FileStream(path, mode, access);5  //do something6}7catch (IOException e)8{9  throw e;10}11finally12{13  if (file != null)14  {15    file.Close();16  }17}
如果你的代码中充满了这种模式的代码是不是会觉得很烦人呢?如果要是读取一个文件的内容,可能真正有用的代码仅仅是几行代码而已。而为了健壮性,我们却要写上10行多的代码来处理异常和关闭文件。

是不是想到了对这些模式性的代码进行封装呢?不错!为了能少写点代码,对其进行封装是件好事,而且我们还可以集中处理这种模式性的代码。至于思路来说,我们把变化的内容作为方法的参数即可。在封装这种操作时处理变化的代码我们使用代理。

对这种模式性的操作封装起来也并不困难。

首先我们需要一个代理,这个代理包含了一个FileStream类型的参数:

delegate void ProcessFileStreamCallback(FileStream file);

虽然这个代理的名字很长,不过我们可以使用匿名函数来少打一些字。