最近我在做两个有关Web开发的项目,下面简单谈一下我这段时间的摸索总结。
一、代码生成器确实好用 以前是很反代码生成器的,但真的使用过后觉得很好用——简单、直接且控制力强。 动软的好处是简单、直接、开源。针对我的应用,我做了以下改进: (1)Image的处理问题。代码生成器生成的操作Image部分的代码有小问题,不能插入全部的Image对象,这个手动修改了下。 (2)生成的代码没有 partial 关键字,不方便扩展。我修改成产生的所有类都是partial类。这样做有什么好处呢?就是对于每个类,你可以在不修改生成的源文件的情况下,申明某个类实现了某些接口,以对代码进行复用。 例如,假设Album、News、Knowledge这三个类都具有某些相同的属性 (ID,Title,AccountId,ViewCount,CreateTime,UpdateTime,等),在代码生成器生成的文件之外,另建一 个目录,放一个Interface.cs的文件:
这样就可以对生成的类进行类型“指派”,可用于泛型代码来简化编程。并且这种“指派”是强类型的,可在编译器检查错误的。 二、分页 这是一个老话题了。以前我直接用GridView和ObjectDataSource,结果是当需求变化了痛苦不堪。比如,客户要求用 VS2005 …… 具体的开发过程中做了一些思考,做出了以下改变: (1)没有使用分页存储过程,而是在C#代码中进行封装,纳入我的基础库里面。这样做的理由是: (a)分页代码比较简单,分页的数据库操作比较耗时,作为存储过程对性能提高不明显; (b)存储过程使用前需要添加进数据库,而在C#端使用则可以省略这一步骤。 (c)方便调用、修改和封装。以下是我写的C#端的数据库分页代码:
在这段代码中,我直接将分页和Top集成在一起了,取第一页时,使用的是Top,以优化性能。同时,也省掉Top调用。这样做的好处,在下面能体现出来。 (2)对于分页部分的代码,我默认进行一下处理: (a)url的page参数指现在的pageIndex; (b)url的count参数指查询结果的总数量; “count” 和 “page ”也可以指定为其它字符串。当是第一页时,去调用 GetDataCount 方法,获得count参数,这个参数直接传递给第二页,第三页……的url,避免查看第二页第三页时,重复获得count,影响性能。 三、封装和复用 通过上面的处理,就很方便对代码进行封装和复用了。 还是以上面的Album,News和Knowledge来说,这三个,编辑都可以从后台加精、推荐、设为热点、锁定、审核通过与否等操作。如何用最简单的代码来实现前台和后台所需要的以下需求呢: (1)获得全部加精的对象;获得N天内加精的对象;以上可以按不同的排序方式排序;获得审核通过的对象,获得N天内审核通过的对象; (2)获得全部推荐的对象;获得N天内推荐的对象;以上可以按不同的排序方式排序;获得审核通过的对象,获得N天内审核通过的对象; (3)获得全部热点的对象;获得N天内热点的对象;以上可以按不同的排序方式排序;获得审核通过的对象,获得N天内审核通过的对象; (4)获得最新的对象;获得N天内审核通过的对象; (5)获得浏览量最多的对象;获得N天内浏览量最多的对象;获得审核通过的对象,获得N天内审核通过的对象; (6)以上检索可指定帐号,也可以是全体帐号。 这里假设Album,News和Knowledge在数据库里相关列的列名都是一致 的,EnableStatus代表审核通过与否,0代表待审核,1代表审核通过,-1代表审核未通 过;IsLocked,IsHot,IsChoiced,IsMarked等编辑的操作项,分别代表是否锁定,是否热门,是否推荐和是否精华。News和 Knowledge还有个CategoryId的列,代表所属类别。以News为例子,代码为: 就只用这简简单单的代码就可以了。这里各个查询选项是“正交”的。accountId 为 null或Empty,则检索全部。mark代表编辑的查询类型,是全部,还是精华还是热门还是最新……,实际上这里最好是传入enum。mode代表审 核状态,最好使用enum。这两处没用enum是历史遗留问题。categoryId代表类别id,如果为负数则检索全部的类别,inDays代表检索多 少天内的数据,负数代表全部,orderColumnName 是排序列,我默认全部desc了,pageSize 是页大小,pageIndex是页序号。
这部分代码是在我动软代码生成器的源代码,使它生成带partial的类之前修改的。如果现在写,使用泛型的话,可以将上面的代码进一步简化。
然后,写一个公用的控件类,以复用共有代码: 然后是具体的控件:
这样一封装就超级好用,可以显示pager也可以不显示,可以用在分页里,也可以用在栏目的首页,且代码量几乎降低到最低,而性能几乎提高到最高,还可以根据各种参数进行缓存。 四、抱怨 尽管使用了这些技巧,Web开发还是太累。一个月坐下来还没做其它项目三五天赚的钱多,并且技术支持比其它类型项目难得多。做一个Web项目后悔一次,今后,尽量不做了,除非价格很高或自己用。
|