前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用匿名函数减少重复代码

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

作者头像
深蓝studyzy
发布2022-06-16 13:39:13
5030
发布2022-06-16 13:39:13
举报
文章被收录于专栏:深蓝居

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

代码语言:javascript
复制
public  bool AddNews(News news)

{

    try

    {

        newsRep.Add(news);//执行数据库操作

        return true;

    }

    catch (Exception ex)

    {

        LogLogic.AddSystemLog(this, ex);//记录异常日志

        return false;//返回false

    }

}

public  bool UpdateNews(News news)

{

    try

    {

        newsRep.Save(news);

        return true;

    }

    catch (Exception ex)

    {

        LogLogic.AddSystemLog(this, ex);

        return false;

    }

}

public  bool DeleteNews(int newsID)

{

    try

    {

        newsRep.Remove(newsID);

        return true;

    }

    catch (Exception ex)

    {

        LogLogic.AddSystemLog(this, ex);

        return false;

    }

}

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

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

代码语言:javascript
复制
public class BaseLogic



{

        protected delegate void TryMethod();

        protected bool TryIt(TryMethod tryMethod)

        {

            try

            {

                tryMethod();//调用委托中的匿名函数

                return true;

            }

            catch (Exception ex)

            {

                LogLogic.AddSystemLog(this, ex);

                return false;

            }

        }



}

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

代码语言:javascript
复制
public class NewsLogic:BaseLogic, INewsLogic

{



//…省略其他代码…



public  bool AddNews(News news)

{

    return TryIt(delegate()//使用匿名函数,调用基类中的TryIt方法

                     {

                         newsRep.Add(news);

                     }

        );

}

public  bool UpdateNews(News news)

{

    return TryIt(delegate()

                     {

                         newsRep.Save(news);

                     }

        );

}

public  bool DeleteNews(int newsID)

{

    return TryIt(delegate()

                     {

                         newsRep.Remove(newsID);

                     }

        );

} 



}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2008-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档