首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

讨论.关于一段代码的可读性.该怎么解决

2012-03-22 
讨论...关于一段代码的可读性.其实就是关于匿名函数的可读性.举个例子,对于数据库事务处理开头和结束的代

讨论...关于一段代码的可读性.
其实就是关于匿名函数的可读性.
举个例子,对于数据库事务处理开头和结束的代码都差不多,
于是我写了这样一个函数:

C# code
bool DoTransaction(Func<bool> act){    using (var transaction = connection.BeginTransaction())    {        try        {            var docommit=act();                        if (docommit)                transaction.Commit();            else                transaction.Rollback();                        return ret;        }        catch (Exception)        {            transaction.Rollback();            throw;        }    }}


然后在使用事务的地方这样调用:

C# code
//非数据库事务操作DoTransaction (()=>{   //数据库事务操作 });//非数据库事务操作


类似的情况还有GDI+ Graphics的状态保存恢复,多线程的对象加锁解锁等.
这样写的好处很明显:少写了不少重复代码,维护起来也方便;
但是总觉得降低了可读性...

大家对这样的写法是怎么看的呢?

[解决办法]
我觉得还好,写多了也不觉得lambda表达式可读性有多差~~~
[解决办法]

代码很简洁。。。
[解决办法]
学习。
[解决办法]
我觉得可读性挺好的,实现思路也很有意思...
[解决办法]
lambda表达式在对代码的简化方面上,做的太好了.
真正理解了lambda表达式之后,可读性怎么可能差呢
[解决办法]
可以,相当于act里面的逻辑是事务性的
[解决办法]
值得肯定
[解决办法]
纠结。。。。如果懂lambda就觉得还可以,如果不懂的话会搞得人一头雾水。
[解决办法]
就这样挺好,就要最大化利用语言的特性
[解决办法]
代码写的很好啊 没觉得哪不好理解
[解决办法]
探讨
引用:

我觉得还好,写多了也不觉得lambda表达式可读性有多差~~~
唉...曾被说这样写初学的看不懂..


引用:

我觉得可读性挺好的,实现思路也很有意思...
黑长直童鞋不来签个约么?

[解决办法]
不太赞同楼上各位的观点!

感觉代码的可读性确确实实的降低了。
[解决办法]
我想问的是怎么样才能像楼主那样把代码贴不出来,看着像开发工具里的样子。
而不会显示成如以下的那样变成纯文本?
//非数据库事务操作
DoTransaction (()=>{
//数据库事务操作 
});

[解决办法]
代码写的有很多余的地方。

没有必要写try...catch,因为DBTransaction在跳出Using{}的时候,会执行其Dispose。比如SqlDbTransaction就会自动当没有回滚的时候自动回滚。用不着画蛇添足地写什么transaction.Rollback()。

没有必要在正常执行中又搞什么异常bool判断。当正常的流程失败,就抛出异常就行了。不要搞什么返回bool值(这是从十几年前c语言入门教程里学的吧?c语言入门教程里不会有异常机制的)。

这样,你的方法内部也就是一个Using{},内嵌一个调用act方法,也就剩下两行代码了。

更进一步,既然DoTransaction方法内这两行代码这么简单,许多时候也就没有必要可以封装调用这个方法,而是直接写着两行代码就行了。所以DoTransaction方法也可以省了。
[解决办法]
貌似这样写法还有个优点,往常程序员很容易犯的错误就是结构化不好,在begintransaction 和commit之间直接return或break,开启的事物没有关闭掉,造成错误,而这样写就没有这方面的问题。
[解决办法]
就思路而言,挺不错的思路啊

如果说看不懂那也没办法,你总不能让李昌镐和常昊去下大家都看得懂的随手棋把

在说对于看的懂的,实际上反倒是更容易交流。

一句单例模式,一句策略模式,依赖抽象,ok,俺明白了也你想干嘛了

难道全世界都看的明白的几百行表达出来的一个依赖抽象的东西,比一句依赖抽象这个词更容易交流不?

你很明显不是,你告诉“依赖抽象”这4个字我就明白了,比那几百行滴代码,读都要读个半个小时的东西更容易让人明白


[解决办法]
还是简洁一些了。
[解决办法]
刚遇到一个问题,vs2008写好的匿名委托程序如果要用vs2005打开编译该怎么办呢?
我没办法,只好全都改了。

热点排行