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)
谢谢!
我将提取各种策略以便将发票纳入方法(这样可以避免大部分评论的需要),然后简化此方法,如下所示:
var invoice = GetInvoiceFromMongoDb(id)
?? GetInvoiceFromSql(id)
?? GetOldSystemInvoice(id);
return invoce.ToJson();
Run Code Online (Sandbox Code Playgroud)
这使您的方法非常容易理解,并将您的代码分解为模块,这可能会帮助您更好地遵循单一责任原则.