数据库增删改查用静态方法实现好还是实例方法实现好

sports 2014-06-18 03:56:04
搞不清楚,请帮我一下谢谢。
比如我取后台用户列表
public static Dictionary<int, string> UserList(string userids){ ...}
由于很多用户登陆都要使用这个方法,我把他用静态方法实现是不是,所以登陆用户都调用同一个内存里的静态方法就可以了。
如果真是这样的话,在用户操作增删改查数据时,实在想不到用实例方法的好处了。
...全文
582 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 jyk 的回复:
方法本身在内存里肯定只有一份,因为没有必要存在另一份。 那么new的到底是什么呢?方法所涉及到的数据。 参数肯定都是独立的,不会互相影响。 内部的静态变量会受到影响。 比如,如果你把 conn 弄成了静态的,那么你就废废了。
很赞同!
sports 2014-06-19
  • 打赏
  • 举报
回复
感谢楼上各位老师的回答,也被sp1234猜中了,我是在单打独干,而被人养了一部份收入。只是一个人简单设计完成一个协同办公系统,不存在二次开发,短平快的设计无需太多开发技巧,工程规划。简单,效率,实用就行
瑞萌QAQ 2014-06-19
  • 打赏
  • 举报
回复
不太清楚啊啊啊啊
  • 打赏
  • 举报
回复
你只能用静态方法,说明了你现在的工作性质。你不需要设计,只要做体力活就有人养你啦。这样搞开发其实挺清闲。
  • 打赏
  • 举报
回复
都可以。 用实例,往往意味着要进行比较高层次的设计。例如(随便举一个创意性的框架基本都需要的)是一个完整的命令解析和处理引擎所动态加载的业务对象,例如二次开发这可以为对象类型加上各种接口(从而引擎需要判断各种接口)。 事实上,静态方法是最简单的。但是你也许有一点会知道,你需要动脑筋进行一些设计,而不是只能调用最简单的那点东西。 但凡架构,都是为了解决各种应激的需求,而不是为了抄书本而提出架构问题。因此你尽量“想到用实例方法的好处”也是为了将来有一天做点更有意义的设计工作——如果你将来想做点有成就的创意性的框架进行应用开发,而不是找一个小作坊养老的话。
Coffcer 2014-06-18
  • 打赏
  • 举报
回复
不涉及到继承之类的话,静态方法和实例方法的唯一区别是实例方法多了个调用对象作参数,两种都是“静态方法”,毫无区别,多线程也不会有问题,看你喜欢了
wanghui0380 2014-06-18
  • 打赏
  • 举报
回复
想法没错,但是具体到实际有下面几条东西需要考虑 1.你确认是静态方法,而不是静态变量 2.你确认静态方法里面,完全不依赖任何全局性资源,比如静态变量,静态conn,非加锁共享资源 如果你都确定,那么他可以是静态滴。博客园有些人说静态这不好,那不好!其实他们是违反了上面两条,如果在没有违反上面两条的情况下,你可以使用静态方法
於黾 2014-06-18
  • 打赏
  • 举报
回复
引用 11 楼 Z65443344 的回复:
如果你数据库里只有一个用户,sqlConnStr都用同一个也没什么问题,甚至你可以把它变成静态的,而不用每一次都对它赋值. 但是像我在5楼举的例子,你用静态做就会出问题的. 如果是在线用户列表这种东西,甚至都不需要每次去数据库里取.也不需要用户每次登陆后写入数据库. 循环一下判断session是否存在,直接给静态list赋值就能达到需求.
抱歉清无视第二段.脑袋有点秀逗了.
於黾 2014-06-18
  • 打赏
  • 举报
回复
如果你数据库里只有一个用户,sqlConnStr都用同一个也没什么问题,甚至你可以把它变成静态的,而不用每一次都对它赋值. 但是像我在5楼举的例子,你用静态做就会出问题的. 如果是在线用户列表这种东西,甚至都不需要每次去数据库里取.也不需要用户每次登陆后写入数据库. 循环一下判断session是否存在,直接给静态list赋值就能达到需求.
md5e 2014-06-18
  • 打赏
  • 举报
回复
引用 9 楼 sports 的回复:
[quote=引用 6 楼 liuchaolin 的回复:] 用应用程序缓存,数据更新时,清除缓存,可设置缓存的时间
我想请教一下,对数据库常用的操作方法,我是写成静态方法好还是实例方法好? 如:用户登陆检测,在线用户列表,当前用户详细资料列表[/quote] 你下载一个Discuz!NT ,里面有一个类包叫Discuz.Cache的,把它拿过来用就可以了
sports 2014-06-18
  • 打赏
  • 举报
回复
引用 6 楼 liuchaolin 的回复:
用应用程序缓存,数据更新时,清除缓存,可设置缓存的时间
我想请教一下,对数据库常用的操作方法,我是写成静态方法好还是实例方法好? 如:用户登陆检测,在线用户列表,当前用户详细资料列表
sports 2014-06-18
  • 打赏
  • 举报
回复
引用 4 楼 FoxDave 的回复:
用new的用完了释放,不能静态化
能讲的稍微详细一点吗,谢谢
sports 2014-06-18
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
如果你全部用静态方法,有个问题就是多用户同时调用此方法的时候,可能会互相影响. 除非你仅仅需要方法本身,而不需要保存用户操作的任何中间结果. 比如一个类中定义了许多全局变量和方法 然后我在使用这个类中的方法之前要先对类中的变量进行赋值,各个方法再使用这些变量进行后续的执行, 比如最简单的增删改查,为了不让每一个方法都要传入一大堆参数,可能需要将一些公有的变量抽出来变成全局的. 比如数据库连接字符串,要查询数据的时间段等等. 如果你是用静态方法,那一个用户查询到一半的时候另一个用户来查询了,不是就全乱了?
这个问题不存的吧应该,比如
 public static Dictionary<int, string> UserList(string userids)
        {

            Dictionary<int, string> userlist = new Dictionary<int, string>();
            using (SqlConnection cn = new SqlConnection(sqlConnStr))
            {
                //try
                //{
                SqlCommand cmd = new SqlCommand(string.Format("select ID,RealName  from Depart_Users where id in ({0})", userids), cn);
                    cn.Open();
                    SqlDataReader dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        userlist.Add(int.Parse(dr["id"].ToString()), dr["RealName"].ToString());
                    }
                   return userlist;
                //}
                //catch (Exception ex)
                //{
                //    Class_LogFile.LogWrite(ex.Message);
                //    throw new ApplicationException("获取部门用户出错!");
                //}
                //finally
                //{
                //    cn.Close();
                //}
            }
        }
方法中只有sqlConnStr是静态变量,不同用户同时取的话结果不存在相互干扰吧。都是重新NEW了一块
md5e 2014-06-18
  • 打赏
  • 举报
回复
用应用程序缓存,数据更新时,清除缓存,可设置缓存的时间
於黾 2014-06-18
  • 打赏
  • 举报
回复
如果你全部用静态方法,有个问题就是多用户同时调用此方法的时候,可能会互相影响. 除非你仅仅需要方法本身,而不需要保存用户操作的任何中间结果. 比如一个类中定义了许多全局变量和方法 然后我在使用这个类中的方法之前要先对类中的变量进行赋值,各个方法再使用这些变量进行后续的执行, 比如最简单的增删改查,为了不让每一个方法都要传入一大堆参数,可能需要将一些公有的变量抽出来变成全局的. 比如数据库连接字符串,要查询数据的时间段等等. 如果你是用静态方法,那一个用户查询到一半的时候另一个用户来查询了,不是就全乱了?
Justin-Liu 2014-06-18
  • 打赏
  • 举报
回复
用new的用完了释放,不能静态化
卖水果的net 2014-06-18
  • 打赏
  • 举报
回复
不建议使用静态的,还是每次 new 一个出来比较踏实。 静态的在任何一个地方崩溃掉,全局就OVER了。
TheFoxing 2014-06-18
  • 打赏
  • 举报
回复
在数据库访问中你可以用静态方法 其余几个业务方法可以用实例
自然框架 2014-06-18
  • 打赏
  • 举报
回复
方法本身在内存里肯定只有一份,因为没有必要存在另一份。 那么new的到底是什么呢?方法所涉及到的数据。 参数肯定都是独立的,不会互相影响。 内部的静态变量会受到影响。 比如,如果你把 conn 弄成了静态的,那么你就废废了。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧