為什麼Ms的那個SqlHelper里面的方法全部用Static(頂者有分) SqlHelper里面的方法全部用Static有什麼好處及缺點??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好处 非常 面向 不用重新new一个对象new新的对象是一个比较消耗系统资源的事情使用static方法可以 很好的节约 系统开销调用速度快但是 会增加 内存开销 因为它是驻留在内存中的 同上,但是为什么不使用singleton模式呢? 我的理解: 由于程序必须以类的形式出现,因此,需要定义为类; 这些函数比较相关,因此都放在SQLHelper中,而另一方面,又不需要保存临时状态,或中间状态。 或者,另一方面,这些函数所需要保存的状态完全不同,不便于使用对象中存储的状态来实现。于是,如果需要,就把这些作为参数,一次传递。 至于系统资源消耗,内存占用等,我认为不是主要原因。因为,要实现预定的功能集合,这些代码必定都要实现的。 to zhxfzhxf1(zhxfzhxf1) :你说的这些用singleton模式也可以实现啊 SqlHelper实现数据库有关的数据的自动释放而不用用户自己去 实现这就是好处, SqlHelper实现数据库有关的数据对象的自动释放而不用用户自己去 实现这就是好处, 有道理,全部定义成static,定义起来简单,使用起来也简单,负面影响那样了,MS的一贯作风 怎麼都沒有相應的錯誤處理的...public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)這里用的事務怎麼都不用提交(Commit)之類的,如果出錯它又怎麼處理,能自動(Rollback) 等....在SqlHelper中的SqlTransaction怎麼用的? 非常赞成 hertcloud 的说法 C#和VC最大的改进就是有大量的静态类可以使用,从命名空间一路下来,不用翻类库就可以写出大部分的代码,长期在MFC里寻找合适类的朋友可能对此会深有体会! SQL Helper本来就写得狠烂。不用singleton模式很简单,因为他没有任何需要保存的环境信息,没有Session和Transaction机制。问题有问题,为什么用静态,他们来没有实例成员他不用静态方法难道用实例方法啊?那不是吃饱了撑了?至于为什么没有实例成员是因为他本身就不需要,因为他又没Session又没Transaction机制的,也没有多态,唯一的一个参数缓存又是可以全局共享的,所以根本没必要。 静态函数优点使用方便,开销小,特别适合 不需要要使用实列变量的、没什么线程冲突的 通用函数SqlHelper 里的所有函数都是这类pshy(无心) ( ) 信誉:100 2006-7-12 11:56:24 得分: 0 怎麼都沒有相應的錯誤處理的...public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)這里用的事務怎麼都不用提交(Commit)之類的,如果出錯它又怎麼處理,能自動(Rollback)错误处理怎么能放在这个地方那,明显应该放在 调用方。错误处理也不应该到处写的。-- 一般就用在最外层调用方-- 或数据库事务的起始方 还有 SqlHelper 是个demo 类需要自己改造一下的.... 弱弱的问一句SqlHelper是个什么?是petshop里面的那个么? sqlhelper 是有漏洞的 .text的blog用这个,在高并发的时候.....惨目忍睹 我觉得SQL Helper只是实现了最基本的功能,简单实用,如果想针对某些业务做更好的应用,比如singleton,需要自己再封装一下,毕竟SQL Helper是为了适应大多数的应用.所以没用singleton(猜测)另外,至于错误处理的确是有问题再说了Enterprise Libary里面不也是用起来很不爽么. 那是由于sqlhelper的作用决定使用静态方法更适合。纯粹是脱离业务的数据层操作。 謝謝各位!to: Ivony() ( ) 因为他又没Session又没Transaction机制的,請問SqlHelper里面不是有用Transaction的嗎?to:FlashElf(銘龘鶽) ( ) -- 或数据库事务的起始方請問是在Transaction.Commit()處嗎? 他没有Transaction的机制,看看别的数据访问层就知道那是什么了。 to:Ivony() 别的数据访问层請問可以提供一點來看下嗎?謝謝![email protected] 简单就是美,数据底层还是要自己写得,不是没有Transaction,是你没用是不是数据访问底层也省略了,人家可不是这么准备的 我的理解,也许很肤浅static的方法只因有static的资源或者数据存在而使用而static的资源和数据只因对象需要共享或者减少单个实列的浪费(有时候大家使用同一个数据足以,还可以保持同步)而存在 sqlhelper可以了,只是没有基于更上一层应用的封装.由自己建立事务环境来使用也并不是这么差径,就算封装好的组件也必须new一个Session.显式打开和提交其实差别也不这么大.唯一不好的地方就是方法基于线程安全,什么Connection,Transaction都要传进去.没有对象操作起来方便灵活. .NET下的数据访问有很多很多模型,Google一搜一大把,例如我写的:http://topic.csdn.net/T/20060228/13/4583043.html 100个按钮按下后改变颜色 如何从人人网抓取学校数据? 在datatable中查找某列为空的所有行 初学.NET,被CollectionBase和LIST的关系搞糊涂了 请教高手:类变量之间的交互问题 关于 C# 编写 Windows Service 的问题` 图书馆管理系统~~~~~ 如何判断目标窗口是否关闭? ★★★很菜的问题~ 大家来帮忙★★★ 请问怎样做一个查询系统? 检查邮件地址是否合法? 郁闷死了,关闭事件的问题
new新的对象是一个比较消耗系统资源的事情使用static方法可以 很好的节约 系统开销
调用速度快
但是 会增加 内存开销 因为它是驻留在内存中的
由于程序必须以类的形式出现,因此,需要定义为类; 这些函数比较相关,因此都放在SQLHelper中,而另一方面,又不需要保存临时状态,或中间状态。 或者,另一方面,这些函数所需要保存的状态完全不同,不便于使用对象中存储的状态来实现。于是,如果需要,就把这些作为参数,一次传递。 至于系统资源消耗,内存占用等,我认为不是主要原因。因为,要实现预定的功能集合,这些代码必定都要实现的。
实现数据库有关的数据的自动释放
而不用用户自己去 实现
这就是好处,
实现数据库有关的数据对象的自动释放
而不用用户自己去 实现
这就是好处,
public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
這里用的事務怎麼都不用提交(Commit)之類的,如果出錯它又怎麼處理,能自動(Rollback)
在SqlHelper中的SqlTransaction怎麼用的?
长期在MFC里寻找合适类的朋友可能对此会深有体会!
SqlHelper 里的所有函数都是这类
pshy(无心) ( ) 信誉:100 2006-7-12 11:56:24 得分: 0
怎麼都沒有相應的錯誤處理的...
public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
這里用的事務怎麼都不用提交(Commit)之類的,如果出錯它又怎麼處理,能自動(Rollback)错误处理怎么能放在这个地方那,明显应该放在 调用方。
错误处理也不应该到处写的。
-- 一般就用在最外层调用方
-- 或数据库事务的起始方
需要自己改造一下的....
另外,至于错误处理的确是有问题再说了Enterprise Libary里面不也是用起来很不爽么.
to:
Ivony() ( ) 因为他又没Session又没Transaction机制的,
請問SqlHelper里面不是有用Transaction的嗎?to:
FlashElf(銘龘鶽) ( )
-- 或数据库事务的起始方
請問是在Transaction.Commit()處嗎?
别的数据访问层請問可以提供一點來看下嗎?謝謝!
[email protected]
是不是数据访问底层也省略了,人家可不是这么准备的
static的方法只因有static的资源或者数据存在而使用
而static的资源和数据只因对象需要共享或者减少单个实列的浪费(有时候大家使用同一个数据足以,还可以保持同步)而存在
由自己建立事务环境来使用也并不是这么差径,就算封装好的组件也必须new一个Session.显式打开和提交其实差别也不这么大.
唯一不好的地方就是方法基于线程安全,什么Connection,Transaction都要传进去.
没有对象操作起来方便灵活.