我在 Controller 代码中有以下代码:
public async Task<int> PullClientsAsync()
{
var service = new DesktopConnectorService<ClientModel>(
new WapiRepository<ClientModel>(), new QuickBooksRepository<ClientModel>());
var filter = new ClientSearchFilter();
try
{
var items = await service.GetItemsAsync(filter);
return items.Count;
}
catch (Exception ex)
{
}
return 0;
}
public async Task<int> PullInvoicesAsync()
{
var service = new DesktopConnectorService<InvoiceModel>(
new WapiRepository<InvoiceModel>(), new QuickBooksRepository<InvoiceModel>());
var filter = new InvoicesSearchFilter();
try
{
var items = await service.GetItemsAsync(filter);
return items.Count;
}
catch (Exception ex)
{
}
return 0;
}
public async Task<int> PullPaymentsAsync()
{
var service = new DesktopConnectorService<PaymentModel>(
new WapiRepository<PaymentModel>(), new QuickBooksRepository<PaymentModel>());
var filter = new PaymentSearchFilter();
try
{
var items = await service.GetItemsAsync(filter);
return items.Count;
}
catch (Exception ex)
{
}
return 0;
}
如您所见,它主要涉及三种类型(ClientModel、PaymentModel 和 Invoices 模型)。上面有很多代码是重复的。
但我相信它可以简化。知道如何实现吗?
谢谢
最佳答案
如果所有模型和过滤器共享一个公共(public)接口(interface)/基类,您可以:
public async Task<int> PullAsync<TModel, TFilter>()
where TModel : IModel,
where TFilter : IFilter, new();
{
var service = new DesktopConnectorService<TModel>(
new WapiRepository<TModel>(), new QuickBooksRepository<TModel>());
var filter = new TFilter();
try
{
var items = await service.GetItemsAsync(filter);
return items.Count;
}
catch (Exception ex)
{
}
return 0;
}
旁注 - 不要像那样使用空的 catch block ,它们会吞下异常,这使得诊断稍后可能发生的问题变得非常困难。至少在那里有一个日志语句,或者做一些有意义的事情。否则,我会删除它。
关于c# - 在 C# 中避免代码重复 - 通过使用泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34130769/