我是如何写网站的 —— UI层部分

来源:互联网 发布:剑网三数据互通 编辑:程序博客网 时间:2024/04/29 16:58
 好久没有写blog了,最近看了csdn里的一个blog,不敢说自己是老鸟吧,但是多少也有点经验,拿出来共享一下吧。

工作了这么长的时间,大部分都是用来写网站了,所以呢讨论范围就先局限在网站范围内吧,ERP了之类的就显不涉及了。(太大了,说不明白,呵呵)

我写网站是按照我自己的方式来编写的,由于时间比较长了(快四年了),也就有了自己的习惯了的方法。一点一点地表达一下吧,大家看看如何。

网站架构上总体来说是分层的,但是真的和一般的是不一样的,也许是完全不一样的吧。


UI层。

先从网站页面说起吧。这一块比较简单,好说一点吧。

页面呢在我看来就两种形式(显示数据方面):列表、详细记录。

1、列表就是一条一条的记录,比如新闻列表了什么的。这里呢又可以细分为两种情况,一个是分页里面的,比如新闻列表页面,另一种就是最新记录,比如在首页里面需要显示最新的十条新闻。


2、详细记录就是一个详细说明,比如一个新闻的详细页面。


再来说一下“实体类”,为什么要加引号呢,因为好像不能算作实体类,一定会有好多人说我的这个根本就算不上实体类的,但是呢我觉得可以凑合用这个名称了。

其实呢很简单,对于列表页面使用结构数组(struct);详细记录就用字符串数组(string)。

结构的属性是固定的(这个应该是不能算作实体类的一个原因吧),
只有七个属性:ID、链接网址、标题、图片路径、人气、发布时间、简要介绍。

1、根据多年的网站经验,90%以上的列表使用七个属性也就够用了。

2、这几个是使用频率最高的,大部分的列表都会用到全部或者一部分。

3、这七个属性和列表也不是精确对应的,需要根据页面的需要进行“偏移”——或者叫做模糊对应。

比如说我最近做的一个素材网站里面的列表页面需要一个“类别”,但是结构里并没有对应的属性,怎么办呢?我会使用“人气”这个属性来对应。也就是说用“人气”的属性来记录“类别”。

(这个应该是违反了某某规则吧,但是呢我不想一个表对应一个实体类,我觉得那样太麻烦了,而页面是多种多样的,一个固定的“实体类”的属性怎么可能都经确定应呢?)


现在我们已经有了一个结构数组了,那么怎么再页面里显示数据呢?(好像都不用问了吧。)

用循环(for 、foreach之类的语句)的方式显示出来就可以了。就是像asp那样在页面里面添加代码。

这样做有什么好处呢?为什么放着哪多的控件不用呢?

1、灵活性。控件都不是绝对灵活的,DataGrid最差,DataList次之,Repeater 灵活性最好。但是和亲自写循环代码相比,灵活性还是差了不少。

由于美工做得页面很漂亮,随之而来的就是比较复杂的页面,尤其是循环的部分,用一般的控件是不太好循环的,

比如多行两列、行交替换色的;多行多列外面又带有边框的;一个记录集多处显示的;记录数不够需要添空行占位的。等等许多的情况,以前用控件很头痛的,现在用结构数组等很轻松的解决了。


2、效率。前一阵子作了一下各个控件在显示数据方面的压力测试(使用Microsoft Application Center Test软件),结果发现,DataGrid(不使用绑定列的情况下)效率倒是最高的,呵呵。其实在于绑定数据的写法上,

A、<%#   DataBinder.Eval(Container,   "DataItem.CityID")%> 这么写是速度最慢的,晕闷的是:这是VS2003的默认写法,有一点“误人子弟”的感觉。

B、((DataRowView)Container.DataItem) ["TradeInfoID"].ToString() 这么写到是能快点,但是太麻烦了,写着不方便。

C、<%=tt1[i].Title%> 。现在可以这么写了,会得到一个 “标题”。代码短,写着方便,又有一点页面和数据库里的字段名分离的感觉。


D、当然我没有忘记作一下压力测试,虽然没有我想象的效果好,但是比用控件要快一点点。



这些是UI层(也就是 .aspx 页面)里主要的部分,至于怎么给结构数组填充数据,这个方法就很多了。

可以在.aspx.cs文件里面定义一个结构数组,然后在Page_Load 事件里面负值就可以了。
可以按照三成的方式来写,也可以一层的写,随意了。

如果你想用类来代替结构也是可一个,我是感觉结构更轻量级一点。

不过我使用另一种方式来填充的,具体的方法明天再写。

ps:老了不行了,写点字就累了,先睡觉了。