本帖最后由 demoooo 于 2010-05-03 23:09:04 编辑

解决方案 »

  1.   

    那你就计算这个类实例化了多少次就行了。
    public class classDemo 
    {
     public static int objNum=0;
         public classDemo()
         {
             classDemo.objNum++;
         }
    }
      

  2.   


    那这样的话不是和静态变量一样了吗, 进程不退出,刷新web层页面实例化的次数也不会重置到0吧.
      

  3.   

    看起来你喜欢盲目乱撞。软件设计很简单,只要会把话说清楚就行。例如你说的:“现在想在web层显示下当前页面总共对数据库查询了多少次”,显然统计的对象是你处理的页面,如果面向哪一个对象都搞错了,肯定是瞎子摸象了。知道了你要处理的对象,接下来的东西就简单了。首先你要得到对象,可以使用 HttpContext.Current.Handler,判断它是否需要在Execute统计,如果需要就计数。具体来说就是在你的Execute中写类似这样的代码ICalculateByDatabase h=HttpContext.Current.Handler as ICalculateByDatabase;
    if(h!=null)
      h.访问数据库计数加1();接口很简单,只有一个方法:public interface ICalculateByDatabase
    {
        void 访问数据库计数加1();
    }关键地,要简单直观地设计。会把中文说清楚,就可以进行很好地软件设计。因此从需求描述出发,可以直观地知道统计的对象是页面而不是什么“实体”(其实我对一些人满脑子塞满了这个空洞的词很有感慨)。你要统计的对象的来源就是你说的“web层显示下当前页面”,而执行这个动作的来源则是Excute方法;当我们的一个页面需要由Excute方法来帮我们统计访问数据库次数时,我们就可以将相应页面的class定义上使用 ICalculateByDatabase 接口来标记出来。这是多么简单直观的东西啊。软件设计归根结底是要为从前台表现为驱动的,而不是从什么数据库表设计为目标。纠缠于不太重要的所谓实体之类的概念,仿佛离开了数据库表结构就不知道软件该如何设计了,这是刚毕业的学生的通病。
      

  4.   

    还用我再解释一下那两行代码吗?在Excute中获取当前的页面,并且转换(使用as表达式)为我们定义的那个接口,如果页面不为null并且转换之后也不为null,表示这个页面具有这个接口,需要累计,那么我们就调用一次这个接口的这个方法就行了。我们的页面有可能这样实现:public partial class Default1 : System.Web.UI.Page, ICalculateBydatabase
    {
        public void 访问数据库计数加1()
        {
            object x = ViewState["访问数据库次数"];
            if (x == null)
                ViewState["访问数据库次数"] = 1;
            else
                ViewState["访问数据库次数"] = (int)x + 1;
        }
    }
      

  5.   

    非常感谢了,我正在实践. 那这样,我不是得把所有想/需要统计访问次数的页面都继承上ICalculateBydatabase接口?
      

  6.   

    其实一个接口就好象是一个“合同”,如果一个页面需要访问数据库的Execute方法给自己服务,就要签上这个合同。这样理解这两段代码的关系,就是最轻快的做法。接口是用来设计的,所以它与是否笨重没有关系。相反地,应该先花一点时间反复揣摩接口协议,然后迅速实现接口。而有的人的做法则相反:花大量时间在各种各样的可能的方案上犹豫来犹豫去,这种翻来覆去花费了80%的宝贵时间,往往主要就是因为他不重视接口,而过分提前去纠结底层的实现了。
      

  7.   

    哈哈,楼上师傅不要说我笨,没实践成功. 在web页面的cs文件中继承IcalulateBydatebase接口出错,错误提示"不会实现接口成员".  我把接口成员的方法放在了web页面cs中.似乎不对.另外这样做,还要在SqlHelper类上引用System.web? 因为在Execute的方法里使用了HttpContext.Current.Handler ,这样会不会降低性能呢.
      

  8.   

    ok啦.  达到我的目的了,再次感谢sp1234就是这样做比较麻烦,我再想办法弄方便点试试. 这样做目前有2点不便利, 1,额外的给dal层增加了system.web的引用,估计要浪费资源比较多.
    2,我已经做成的几十个web页面都得去加上继承接口 和增加接口实现方法在web页面代码里.灵活是比较灵活,就是代码复用不起来,维护起来麻烦.我试想,在dal层中的那些Execute方法判断只要是当前http,就给计数器+1, 然后web层只需要调用计数器的值就出来了多方便啊.