嘻哈人间,我醉逍遥

while(true){this.StudyDotNet(DotNetLanguage.CSharp);}

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
http://forums.coder.cn/projects/
http://www.qzcrc.com/movie/

前一个采用了gzip压缩,后一个没有。前一个是测试运行,后一个是正式运行。前一个没几个人访问,后一个访问人数比较多,sql server在后一个上。前一个是远程连接。两服务器处同一机房中。配置后一个比较好一点点,不知道这样比较。gzip能不能显示出优势来。

在做这个项目的时候,有些体验和教训,试试能不能写出来。文笔有限。

一、 程序界面看上去比较简单。就是一个list.aspx,一个detail.aspx.还有一个reg.aspx,login.aspx.可是后面的工作确不简单。后台管理全部是使用flash+xml+Asp.Net完成的。不仅仅是为了漂亮和布局的方便,其实还有其它目的。呵呵。其它 Flash内部已经可以完成好多工作,例如验证,例如提交。
二、多写Control,可以实现大程度的组件复用。例如 Flash多处使用,可以写一个flashObject,视频组件可以写成一个VideoObject,这样可以避免硬编码,灵活和重用都兼得。像我在这个项目里,就有MovieControl,MoveListControl,PagerControl,padObjectControl,TopListControl,MenuBarControl,.....等等一系列的控件。使得程序变得比较简单。
三、就是数据的访问。我以前不管是写webForm还是winFrom,都习惯于采取这样的写法。sql做数据服务端,采用存储过程,再自写一个数据访问类,就是大体实现 ExecuteAsDataSet这样的东东,然后再做一个DataProvider,为程序提供所有数据支持。还有一些相应的类,例如user,例如product,然后再有userCollection等等。多层很累,万一需要修改数据库的结构,就需要修改多个方面,首先 存储过程,再就是实体类,再就是数据提供类,再就是具体的代码。苦不甚言。
        现在,我尝试使用 Grove,用更清晰的方法来实行。果然还是有些好处。一个实体类,一个DB类,一个Manager类。需要修改数据库的时候只需要改动实体类即可。很方便。呵呵。但是也有一个不方便之处,需要联接多个表的时候,使用一点都不方便,而且不支持分页等。弄的我最后还是用了自己另一个数据类。真是失败,可能是自己还是不太懂他的使用吧!

大家看看我的list.aspx

<%@ Register TagPrefix="uc1" NameSpace="Wuyin.Ent.Movie.Controls" Assembly="Wuyin.Ent.Movie" %>
<%@ Register TagPrefix="uc1" TagName="Title" Src="Title.ascx" %>
<%@ Register TagPrefix="uc1" TagName="TopBars" Src="TopBars.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Footer" Src="Footer.ascx" %>
<%@ Page language="c#" Codebehind="list.aspx.cs" AutoEventWireup="false" Inherits="Wuyin.Ent.Movie.List" %>
<uc1:Title id="Title1" runat="server" HTMLTitle="影视列表" PageKeywords="author;skyover|company;Wuyin Network Co.,Ltd|imagetoolbar;no"
 CssFilePath="list.css|Pager.css"></uc1:Title>
<uc1:TopBars id="TopBars1" runat="server"></uc1:TopBars>
<uc1:PodObject runat="server" id="PodObject1">
 <ChildControls>
  <uc1:NavigateTreeViewObject runat="server" id="NavigateTreeViewObject1" TitleText="站点导航" />
  <div class="hr"></div>
  <uc1:Search runat="server" />
  <div class="hr"></div>  
  <uc1:GetMovies runat="server" id="GetMovies1" ShowPicture="false" TitleText="最近更新" GetMovieType="ByDateDesc" />
  <div class="hr"></div>
  <uc1:GetMovies runat="server" id="Getmovies2" ShowPicture="false" TitleText="点击排行" />
  <div class="hr"></div>
  <div id="down">
   <h3>常用软件</h3>
   <a href="http://www.microsoft.com/windows/windowsmedia/intl/download/default.asp?DispLang=cn"
    title="下载MediaPlayer 9 系列!"><img src="images/download01.jpg" alt="下载MediaPlayer 9 系列!" /></a><br />
   <a href="http://www.microsoft.com/windows/windowsmedia/intl/download/default.asp?DispLang=cn"
    title="下载MediaPlayer 9 系列!"><img src="images/download02.jpg" alt="下载MediaPlayer 9 系列!" /></a><br />
   <a href="http://www.real.com/realone/?src=realplayer" title="下载RealPlayer 10 系列!"><img src="images/download03.jpg" alt="下载RealPlayer 10 系列!" /></a><br />
   <a href="http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&amp;Lang=S_Chinese&amp;P5_Language=S_Chinese"
    title="获取MacroMedia Flash Player!"><img src="images/download04.jpg" alt="获取MacroMedia Flash Player!" /></a><br />
  </div>
 </ChildControls>
</uc1:PodObject>
<uc1:MovieListControl runat="server" id="MovieListControl1" />
<uc1:Footer id="Footer1" runat="server"></uc1:Footer>
















还有菜单的构造

<uc1:MenuBar id="Menubar1" runat="Server">
	<ChildrenMenuItems>
		<uc1:MenuItem DisplayText="返回首页" Url="./Default.aspx" runat="Server" ID="Menuitem1" ImageUrl="images/mnu-home.jpg" />
	</ChildrenMenuItems>
</uc1:MenuBar>

		void BuildMenu(XmlNode Node,Object menu)
		{
			foreach(XmlNode node in Node.ChildNodes)
			{
				if(node.Name == "BigClass")
				{
					Wuyin.Ent.Movie.Controls.MenuItem mi = new Wuyin.Ent.Movie.Controls.MenuItem();
					mi.DisplayText = node.Attributes["label"].Value;
					mi.ImageUrl = node.Attributes["ImageUrl"].Value;
					if(node.Attributes["Url"]!=null && node.Attributes["Url"].Value != String.Empty)
						mi.Url = node.Attributes["Url"].Value;
					else
						mi.Url = String.Format("go.aspx?type=big&amp;id={0}",node.Attributes["data"].Value);
					mi.ID = "menuItem_big_" + node.Attributes["data"].Value;
					((Controls.MenuBar)menu).ChildrenMenuItems.Add(mi);
					//Response.Write(mi);

					if(node.HasChildNodes)
						BuildMenu(node,mi);
				}
				else
				{
					Wuyin.Ent.Movie.Controls.ChildMenuItem mi = new ChildMenuItem();
					mi.DisplayText = node.Attributes["label"].Value;
					if(node.Attributes["Url"]!=null && node.Attributes["Url"].Value != String.Empty)
						mi.Url = node.Attributes["Url"].Value;
					else
						mi.Url = String.Format("go.aspx?type=small&amp;id={0}&amp;pid={1}",node.Attributes["data"].Value,node.Attributes["ParentID"].Value);					
					//Response.Write(mi);
					((Controls.MenuItem)menu).Childrens.Add(mi);
				}
			}
		}

具体效果可见上面的两个网址。

总而言之,在WebApplication里,我们应该尽可能的使代码重用,以及数据访问简单化。

最后还有一点,尽量符合xhtml规范,这样搜索引擎比较容易找到。呵呵。

上面的站点我只是测试根本很少在其它地方连接,Google都在短短十天之内就已经找到100多篇页面了。

说了这么多,语无伦次的。不知道说什么。请大家见谅。
posted on 2004-05-28 20:29  嘻哈呵嘿  阅读(2150)  评论(8编辑  收藏  举报
欢迎访问无垠IT教学网论坛