当前位置:  开发笔记 > 编程语言 > 正文

避免在c#中重复代码 - 使用泛型?

如何解决《避免在c#中重复代码-使用泛型?》经验,为你挑选了1个好方法。

我在控制器代码中有以下代码:

public async Task PullClientsAsync()
{
    var service = new DesktopConnectorService(
            new WapiRepository(), new QuickBooksRepository());
    var filter = new ClientSearchFilter();
    try
    {
        var items = await service.GetItemsAsync(filter);
        return items.Count;
    }
    catch (Exception ex)
    {


    }
    return 0;
}

public async Task PullInvoicesAsync()
{
    var service = new DesktopConnectorService(
        new WapiRepository(), new QuickBooksRepository());
    var filter = new InvoicesSearchFilter();
    try
    {
        var items = await service.GetItemsAsync(filter);
        return items.Count;
    }
    catch (Exception ex)
    {


    }
    return 0;
}

public async Task PullPaymentsAsync()
{
    var service = new DesktopConnectorService(
        new WapiRepository(), new QuickBooksRepository());
    var filter = new PaymentSearchFilter();
    try
    {
        var items = await service.GetItemsAsync(filter);
        return items.Count;
    }
    catch (Exception ex)
    {


    }
    return 0;
}

如您所见,它有三种类型(ClientModel,PaymentModel和Invoices模型).上面的很多代码都在重复.

但我相信它可以简化.知道如何实现吗?

谢谢



1> Yuval Itzcha..:

如果所有模型和过滤器共享一个公共接口/基类,您可以:

public async Task PullAsync() 
                       where TModel : IModel, 
                       where TFilter : IFilter, new();
{
    var service = new DesktopConnectorService(
                    new WapiRepository(), new QuickBooksRepository());
    var filter = new TFilter();
    try
    {
        var items = await service.GetItemsAsync(filter);
        return items.Count;
    }
    catch (Exception ex)
    {
    }
    return 0;
}

附注 - 不要使用这样的空捕获块,它们会吞下异常,因此很难诊断出以后可能发生的问题.至少在那里有一个日志记录声明,或做一些有意义的事情.否则,我会删除它.


澄清,最后Yuval的段落:吞咽异常是不好的,因为当你这样做时,如果你的程序行为不端,你就不会立即获得反馈.这使得在问题发生时更难找到问题,因为您的代码正在主动隐藏它.如果您在整个代码中持续吞噬异常,那么您的软件就会变得难以维护.
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有