首页 asp.Net 使用匿名函数减少重复代码

使用匿名函数减少重复代码

在一个项目中我使用到了软件工厂的工具帮助生成了对数据库的CRUD的方法,在Logic中需要对数据层进行封装,以提供对实体操作的接口,封装后的代码如:publicboolAddNews(Newsnews){try{newsRep.Add(news);//执行数据库操作returntrue;}catch(Exceptionex){LogL

在一个项目中我使用到了软件工厂的工具帮助生成了对数据库的CRUD的方法,在Logic中需要对数据层进行封装,以提供对实体操作的接口,封装后的代码如:

<div style=”border-right: #cccccc 1px solid; padding-right: 5px; padding-left: 4px; font-size: 13px; border-top: #cccccc 1px solid; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee”>
<span style=”color: #0000ff”>public<span style=”color: #000000″><span style=”color: #0000ff”>bool<span style=”color: #000000″>AddNews(Newsnews)
{
<span style=”color: #0000ff”>try<span style=”color: #000000″>
{
newsRep.Add(news);<span style=”color: #008000″>//<span style=”color: #008000″>执行数据库操作<span style=”color: #008000″><span style=”color: #000000″><span style=”color: #0000ff”>return<span style=”color: #000000″><span style=”color: #0000ff”>true<span style=”color: #000000″>;
}
<span style=”color: #0000ff”>catch<span style=”color: #000000″>(Exceptionex)
{
LogLogic.AddSystemLog(<span style=”color: #0000ff”>this<span style=”color: #000000″>,ex);<span style=”color: #008000″>//<span style=”color: #008000″>记录异常日志<span style=”color: #008000″><span style=”color: #000000″><span style=”color: #0000ff”>return<span style=”color: #000000″><span style=”color: #0000ff”>false<span style=”color: #000000″>;<span style=”color: #008000″>//<span style=”color: #008000″>返回false<span style=”color: #008000″><span style=”color: #000000″>}
}<span style=”color: #0000ff”>public<span style=”color: #000000″><span style=”color: #0000ff”>bool<span style=”color: #000000″>UpdateNews(Newsnews)
{
<span style=”color: #0000ff”>try<span style=”color: #000000″>
{
newsRep.Save(news);
<span style=”color: #0000ff”>return<span style=”color: #000000″><span style=”color: #0000ff”>true<span style=”color: #000000″>;
}
<span style=”color: #0000ff”>catch<span style=”color: #000000″>(Exceptionex)
{
LogLogic.AddSystemLog(<span style=”color: #0000ff”>this<span style=”color: #000000″>,ex);
<span style=”color: #0000ff”>return<span style=”color: #000000″><span style=”color: #0000ff”>false<span style=”color: #000000″>;
}
}<span style=”color: #0000ff”>public<span style=”color: #000000″><span style=”color: #0000ff”>bool<span style=”color: #000000″>DeleteNews(<span style=”color: #0000ff”>int<span style=”color: #000000″>newsID)
{
<span style=”color: #0000ff”>try<span style=”color: #000000″>
{
newsRep.Remove(newsID);
<span style=”color: #0000ff”>return<span style=”color: #000000″><span style=”color: #0000ff”>true<span style=”color: #000000″>;
}
<span style=”color: #0000ff”>catch<span style=”color: #000000″>(Exceptionex)
{
LogLogic.AddSystemLog(<span style=”color: #0000ff”>this<span style=”color: #000000″>,ex);
<span style=”color: #0000ff”>return<span style=”color: #000000″><span style=”color: #0000ff”>false<span style=”color: #000000″>;
}
}

一看上面的代码,其实都是实现调用一个数据访问层的方法,如果调用完成则返回成功,调用异常则返回失败。同样的逻辑,有必要重复的写这样的代码吗?虽然Ctrl+C和Ctrl+V的方式可以避免重复的手工输入重复的代码,但是从代码的艺术性来说,这样的代码明细不够优雅。此时我想到的第一个办法就是使用委托。但是数据访问层的方法传入的参数数目和类型又不相同,不能使用一个委托来实现。从一般的逻辑来说这里使用委托是必然的,但是一般的委托又不能适用于各自数据访问层的方法,这是就要使用.net2.0中的匿名函数来实现了。

首页我们定义一个所有Logic类的基类BaseLogic,在其中申明一个匿名函数的委托void TryMethod(),然后将公共的try catch部分提取出来形成方法TryIt。

<div style=”border-right: #cccccc 1px solid; padding-right: 5px; padding-left: 4px; font-size: 13px; border-top: #cccccc 1px solid; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee”>
<span style=”color: #0000ff”>public<span style=”color: #000000″><span style=”color: #0000ff”>class<span style=”color: #000000″>BaseLogic
{
<span style=”color: #0000ff”>protected<span style=”color: #000000″><span style=”color: #0000ff”>delegate<span style=”color: #000000″><span style=”color: #0000ff”>void<span style=”color: #000000″>TryMethod();
<span style=”color: #0000ff”>protected<span style=”color: #000000″><span style=”color: #0000ff”>bool<span style=”color: #000000″>TryIt(TryMethodtryMethod)
{
<span style=”color: #0000ff”>try<span style=”color: #000000″>
{
tryMethod();<span style=”color: #008000″>//<span style=”color: #008000″>调用委托中的匿名函数<span style=”color: #008000″><span style=”color: #000000″><span style=”color: #0000ff”>return<span style=”color: #000000″><span style=”color: #0000ff”>true<span style=”color: #000000″>;
}
<span style=”color: #0000ff”>catch<span style=”color: #000000″>(Exceptionex)
{
LogLogic.AddSystemLog(<span style=”color: #0000ff”>this<span style=”color: #000000″>,ex);
<span style=”color: #0000ff”>return<span style=”color: #000000″><span style=”color: #0000ff”>false<span style=”color: #000000″>;
}
}
}

接下来就是改写前面的不够优雅的函数,改成使用匿名函数的方式:

<div style=”border-right: #cccccc 1px solid; padding-right: 5px; padding-left: 4px; font-size: 13px; border-top: #cccccc 1px solid; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee”>
<span style=”color: #0000ff”>public<span style=”color: #000000″><span style=”color: #0000ff”>class<span style=”color: #000000″>NewsLogic:BaseLogic,INewsLogic
{<span style=”color: #008000″>//<span style=”color: #008000″>…省略其他代码…<span style=”color: #008000″><span style=”color: #000000″><span style=”color: #0000ff”>public<span style=”color: #000000″><span style=”color: #0000ff”>bool<span style=”color: #000000″>AddNews(Newsnews)
{
<span style=”color: #0000ff”>return<span style=”color: #000000″>TryIt(<span style=”color: #0000ff”>delegate<span style=”color: #000000″>()<span style=”color: #008000″>//<span style=”color: #008000″>使用匿名函数,调用基类中的TryIt方法<span style=”color: #008000″><span style=”color: #000000″>{
newsRep.Add(news);
}
);
}<span style=”color: #0000ff”>public<span style=”color: #000000″><span style=”color: #0000ff”>bool<span style=”color: #000000″>UpdateNews(Newsnews)
{
<span style=”color: #0000ff”>return<span style=”color: #000000″>TryIt(<span style=”color: #0000ff”>delegate<span style=”color: #000000″>()
{
newsRep.Save(news);
}
);
}<span style=”color: #0000ff”>public<span style=”color: #000000″><span style=”color: #0000ff”>bool<span style=”color: #000000″>DeleteNews(<span style=”color: #0000ff”>int<span style=”color: #000000″>newsID)
{
<span style=”color: #0000ff”>return<span style=”color: #000000″>TryIt(<span style=”color: #0000ff”>delegate<span style=”color: #000000″>()
{
newsRep.Remove(newsID);
}
);
}
}

对比一下现在的代码和前面的代码,明显感觉代码清爽了很多,匿名函数的使用使得代码更易修改和维护。

本文来自网络,不代表青岛站长网立场。转载请注明出处: https://www.0532zz.com/html/kaifa/asp-net/20200716/6124.html
上一篇
下一篇

作者: dawei

【声明】:青岛站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

返回顶部