小鬼之家

流浪,游走于文明与原始之间. 关注底层技术,实现美好生活。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

     今天无聊再到首页上吹吹水,相信来博客园转的人就算不是从事编程的也是与之相关的吧,所以如果聊得不对的地方请多多指正。

     编程的通俗说法就是写代码,现在的流行的语言很多,但大都离不开类似if这样的判断语名、类似for这样的循环语句、再有就是一些变量声明、赋值等的一些语句;所以说学习一门语言所需要花费的工夫并不是很多,就像C#这样的语言,我们只需要知道一些最基本的知识就可以开始干活了。首先我们要安装好.net framework,如果您不知道怎么装这个东西也没关系,您可以到 http://www.microsoft.com/express/product/default.aspx 下载一个快速开发版的的集成开发环境装上也成。

     下面来看看一个最简单的C#程序:

using System;

class First
{
    
static void Main()
    {
        Console.WriteLine(
"My first CSharp program.");
    }
}

 

     要让这样的一个程序跑起来,我们需要在命令行窗口中用csc First.cs来编译它,再就是First.exe来运行它。进行完这些步骤我们已经实现了一个程序并且让它跑起来了,但大家会满足于这样的程序吗?不会,因为这样的程序对我们来说一点用也没有。为了让它有一些作用,我们还需要了解一些基本的语句,那就是if、for、foreach、do、while等语句,了解了它们,我们就可以做出我们所需要的业务逻辑。了解了这些我们满足了吗?当然不,因为当我们要写一些稍微复杂的业务逻辑的时候,我们会发现我们无法管理我们的程序了,因为一大堆的东东都写在了一起既不美观也不优雅更不方便管理。于是我们有必要去掌握类、属性、方法等东西;而为了更方便于我们对代码的扩展,我们还要掌握继承、封装、多态等一些相关的概念。等我们掌握好了这些东西,我们很快就会发现我们还是无法做出自己想要的程序来,因为当今所流行的程序的形式早就已经不是命令行的方式的,虽然这种方式曾经是一种经典。综合上面这么多的废话,大家应该清楚我想说什么了吧?编程这样的一个活,语言平身的知识只是其所需要的知识的很小的组成部分,我们还需要花大量的时间去了解我们的程序所需要的运行环境平身。下面聊聊用C#进行BS开发的一些相关的东东,如果您不感兴趣,可以直接略过了。

     WBE开发有两个运行环境,一个是服务器端,一个是浏览器端;而对于.net程序员来说,我们的服务器端基本上就是IIS,我们运用C#(或别的什么语言)进行WEB编程的时候就是在IIS定义好的规则下,通过它的一些接口进行数据的接收与响应。.NET FRAMEWORK为了我们能更为方便的进行编程,对IIS的接口进行了封装,并且提供了大量的我们在日常的开发中经常要用的标准程序模块,但是我感觉它的以控件为主的WEB开发方式封装有点过度了,所以一些技术上的爱好者喜欢对它进行重新封装,目前比较流行的MVC开发框架基本都是从HttpModule层或是HttpHandler层进行接管,重新定义流程的走向;而我自己更喜欢直接从HttpModule上进行按管,因为它的层次更高一些,能把握的东西更多一些。

     要实现从HttpModule上接管,我们需要修改web.config文件,添加以下的语句:

<httpModules>
    
<add name="CHttpModule" type="Cvv.WebUtility.HttpModule, Cvv.WebUtility" />
</httpModules>

 

而HttpModule类需要实现IHttpModule,代码如下:

using System;
using System.IO.Compression;
using System.Web;

namespace Cvv.WebUtility
{
    
public class HttpModule : IHttpModule
    {
        
void Dispose()
        {
            
        }

        
void Init(HttpApplication context)
        {
            WebAppConfig.Init();

            httpApplication.PostResolveRequestCache 
+= PostResolveRequestCache;
            httpApplication.PostMapRequestHandler 
+= PostMapRequestHandler;
            httpApplication.PreRequestHandlerExecute 
+= PreRequestHandlerExecute;
            httpApplication.ReleaseRequestState 
+= HttpCompressHeader;
            httpApplication.PreSendRequestHeaders 
+= HttpCompressHeader;
        }
    }
}

 

     PostResolveRequestCache、PostMapRequestHandler、PreRequestHandlerExecute为三个重要的事件,其相关的意义请参见MSDN文档(http://msdn.microsoft.com/en-us/library/system.web.httpapplication.postresolverequestcache.aspx), 通过这三个事件,我们实现了根据URL来确定我们要执行的控制类和要运行的具体的方法等逻辑,而对于ReleaseRequestState、PreSendRequestHeaders事件的接管主要是为了对输出流进行压缩。通过对这些事件的接管,我们就再也不需要去关注那些Page_Init、Page_Load等事件了。

     WEB开发最经典的任务就是执行些代码之后产生出些输出(当然也有不产生输出的),所以我们重新定义流程的首要任务就是把这些整理清楚,使它更清析更简洁。在WEB上我们无法实现经典的MVC模式,网上流行的所谓的MVC框架实现的基本是简化后的MVC模式,但这种简化了的模式却刚好是我们所想要的。我们通过执行控制类的方法来得到要设置到模板里的数据,再根据是否需要输出来决定是否需要执行View的Render方法。而为了实现真正意义的上数据与表现分离,我们需要一个强大的模板分析引擎,只有这样我们才能在模板里进行显示逻辑的编码。

     实现完上面所谈的这些东西之后,我们应该把眼光关注到浏览器层了。(要睡觉了,以后再写吧,写得好乱,不好意思。)

 

posted on 2009-02-04 23:40  黄尚  阅读(2554)  评论(15编辑  收藏  举报