首先来看一段代码:
public static void Alert(object message)
{
string js = @"<Script language='JavaScript'>
alert('{0}');
</Script>";
HttpContext.Current.Response.Write(string.Format(js, message.ToString()));
}
{
string js = @"<Script language='JavaScript'>
alert('{0}');
</Script>";
HttpContext.Current.Response.Write(string.Format(js, message.ToString()));
}
相信大家已经看出问题了,javaScript的部分我们先不讨论,单说这Response.Write。
首先,必须肯定这个代码是可以运行的(不然就不会在项目中使用了)。显然,这种用法是不好的。虽然它可以运行,但是这段代码至少有两大罪状:
第一,不符合xhtml的标准,response.Write会将数据写在<!DOCTYPE …… /〉的上面。
第二,破坏文档结构,使界面不能按照预想效果呈现。
其次,这种写法不符合asp.net的编程思想,asp.net试图将所有的东西都对象化,利用对象体系进行操作。所以,在asp.net中提供了一套注册脚本的方法(如:Page.ClientScript.RegisterClientScriptBlock,在asp.net ajax中使用 ScriptManager.RegisterClientScriptBlock)用这些方法,给人的感觉非常好,很OO。
涉及到javaScript函数时,应将函数写在一个js文件中,然后去引用这个文件,再在代码中调用。
现在,回过头来看里面的内容。里面的参数既然是object,问了下别人,才知道是为了让异常能直接做参数进行传递。我晕了,彻底的被他们给“征服了”。
第一,异常既然直接alert给用户,我们给用户的应该是友好的信息,而将产生的异常给log下来。
第二,弱类型。设计成object是为了既能传String又能传Exception.这个设计很糟糕,不说Exception这样传递过来显示没有意义,用了object就能传递其他任何的对象,就算是想传递这两种类型的对象,也应该用重载,不应该使用object.
当然,在我接触的代码中,还有很多这种不合理的所谓.net代码。我开始就怀疑写这个代码的人是从asp转到asp.net的,一打听,果然是。
这只是其中的一种,就是将asp中的开发模型或者方法、思路拿到asp.net中来用。典型的临床表现是:javaScript代码写在C#代码中,不用母版页用框架。
还有很多种这类所谓的.net程序员了。大概是因为asp.net入门太容易了,所以这里面的水分就多的让人吃惊。不过这类人也不会混得太差,因为经过他们的无数次BT的if嵌套,也实现了多态的功能。而且他们写的程序大家都看的懂,但只有他自己才能维护,代码量又多的要命,让boss以为他们工作比我们勤奋。可惜,我们站的高,但没多少人能看那么远了。