[探讨]高速,优良的ASPX网站开发架构思路之一...附VS2008工程代码..
今天是试用VS2008的第二天,谈不上喜欢不喜欢,对于我来说语言都是工具,只是VS2008这个工具可以方便的开发Javascript应用程序,这个我比较喜欢,其他的,我觉得还不如VS2003呢...不过呢,一山不能存二虎,我可不喜欢乱七八糟的装很多软件,所以我决定慢慢的用VS2008来代替VS2003,这样以后重装系统的时候就不用装VS2003了,就一个VS2008,瞧,多干净啊...
好了好了,说正事.说到VS,不得不说其缔造者--微软,为什么要创造ASP.NET呢?哦 是为了和IBM等同行竞争,在windows平台上竞争,呵呵.那么windows是西方国家的产物,在工业化观念很强的西方国家,基于模块化组件化的设计是非常被推崇的,所以基于.NET的组件式模块化windows开发被微软认为是主流.好的,注意,这里并没有提到效率和速度,从西方工业化的观点来说,模块化组件式的概念高于效率这个概念,这句话等同于牺牲效率换来快速的组件开发方式.说到这里,你应该明白为什么微软体系架构的速度拼不赢LAMP体系了吧?因为一个注重开发效率,另一个注重运行效率.SO...选择什么,你心里应该有个底儿了吧.
那么,我今天想说的是,怎么样才能在基于优良组件化设计的思路下,尽可能高的提高性能呢?为了直观的批判基于VIEWSTATE的官方ASPNET2.0技术,我们来看看下面的非官方ASPX的开发思路,这个思路既可以使用.NET的面向对象设计模式也可以媲美PHP的高效执行模式.我想你们可能已经习惯了ASPX拖来拖去的控件开发方式了,也已经习惯了慢吞吞的网页打开速度了,不过没关系,看了以下文章,相信你必定会有所启发.
我会提到昨天我说到的3种开发方式:
1.后端文件开发方式,codebehind
2.混合页面开发方式,PHP方式
3.官方组件开发方式.
先说第一种,为了不使用VIEWSTATE,建立一个main.aspx,然后删除ASPX页面里面的HTML代码,只留下以下代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="main.aspx.cs" Inherits="main" %>
<%=HTML%>
后端代码
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
public partial class main : basepage
{
protected string HTML = "";
protected void Page_Load(object sender, EventArgs e)
{
HTML = "<div style='font-size:17px;font-family:Times New Roman;width:500px;color:#ffffff;'>While Wrath of the Lich King will improve many of World of Warcraft's existing features, it will also introduce plenty of brand-new ones to keep the game fresh and interesting. One of these new features is sure to suit a wide range of play styles: achievements. These self-contained goals will offer new challenges, satisfy goal-oriented players, allow others to see your accomplishments in World of Warcraft -- and are just plain fun</div>";
}
}
注意后端代码里面的 basepage 基类.这里我说一下,我们创建一个新的aspx页面的时候,默认是继承自System.Web.UI.Page,但是往往我们做的很多页面都有公共的banner和footer,在不使用微软官方技术的前提下,我们需要自己建立我们的基类,然后每个页面继承自这个基类,实现面向对象的继承优势.下面来看basepage.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
/// <summary>
///basepage 的摘要说明
/// </summary>
public class basepage : System.Web.UI.Page
{
public basepage()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
protected override void OnError(EventArgs e)
{
base.OnError(e);
}
protected override void Render(HtmlTextWriter writer)
{
writer.Write(ui.BASEPAGE_START);//加入banner
base.Render(writer);//相当于每个派生页面
writer.Write(ui.BASEPAGE_END);//加入footer
}
}
其实就是重载了Render,这样我们就可以仅仅把每个新建的aspx里的System.Web.UI.Page替换为basepage,就简单的实现了ASP2.0里面的MASTER Page的功能.