控制方法返回的最佳模式
本文关键字:最佳 模式 返回 方法 控制 | 更新日期: 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();