控制方法返回的最佳模式

Gre*_*reg 1 .net c# design-patterns

是否有一种模式或最佳选择来改进此方法并减少重复的ifs?

我已经使用Adapter模式将接口转换为另一个接口.

public string GetInvoice(int id)
{
    // Search in Mongodb and get the object
    var invoice = MongoRepository.Get<IInvoiceEntity>(x => x.Invoice.Id == id)
        .First();

    if (invoice == null) 
    {
        // Search in SQL
        invoice = EFRepository.Get<IInvoiceEntity>(x => x.Invoice.Id == id)
            .First();
    }

    if (invoice == null)
    {
        // This invoice is an old system item
        var oldInvoice = WCFClient.InvoiceService.Get(id);

        var adapter = new OldInvoiceAdapter(oldInvoice);
        invoice = adapter.AdaptEntity();
    }

    return invoce.ToJson();
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Str*_*ior 5

我将提取各种策略以便将发票纳入方法(这样可以避免大部分评论的需要),然后简化此方法,如下所示:

var invoice = GetInvoiceFromMongoDb(id) 
       ?? GetInvoiceFromSql(id)
       ?? GetOldSystemInvoice(id);

return invoce.ToJson();
Run Code Online (Sandbox Code Playgroud)

这使您的方法非常容易理解,并将您的代码分解为模块,这可能会帮助您更好地遵循单一责任原则.