控制方法返回的最佳模式

本文关键字:最佳 模式 返回 方法 控制 | 更新日期: 2023-09-27 18:13:26

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

我已经使用适配器模式将一个接口转换为另一个接口。

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();
}

谢谢!

控制方法返回的最佳模式

我将提取用于将发票转换为方法的各种策略(这避免了大量注释的需要),然后简化此方法,如下所示:

var invoice = GetInvoiceFromMongoDb(id) 
       ?? GetInvoiceFromSql(id)
       ?? GetOldSystemInvoice(id);
return invoce.ToJson();

这使得你的方法非常容易理解,并将你的代码分解成模块,这可能会帮助你更好地遵循单一职责原则。

如果给定值不为空则返回该值,如果该值为空则使用另一个值,这种模式正是空恢复运算符(??)所做的。这可以帮助你写:

var invoice = GetFromMongo(id) ?? GetFromSQL(id) ?? GetFromOldArchive(id);
return invoice.ToJson();