Anlaması daha kolay, büyük bir boole ifadesi (oldukça karmaşık) ya da aynı ifadeyi yordama yöntemlerine (okumak için fazladan fazla kod) ayrıştırmak nedir?
Seçenek 1, büyük boole ifadesi:
private static bool ContextMatchesProp(CurrentSearchContext context, TValToMatch propVal)
{
return propVal.PropertyId == context.Definition.Id
&& !repo.ParentId.HasValue || repo.ParentId == propVal.ParentId
&& ((propVal.SecondaryFilter.HasValue && context.SecondaryFilter.HasValue && propVal.SecondaryFilter.Value == context.SecondaryFilter) || (!context.SecondaryFilter.HasValue && !propVal.SecondaryFilter.HasValue));
}
Seçenek 2, Koşulları yordama yöntemlerine ayrılır:
private static bool ContextMatchesProp(CurrentSearchContext context, TValToMatch propVal)
{
return MatchesDefinitionId(context, propVal)
&& MatchesParentId(propVal)
&& (MatchedSecondaryFilter(context, propVal) || HasNoSecondaryFilter(context, propVal));
}
private static bool HasNoSecondaryFilter(CurrentSearchContext context, TValToMatch propVal)
{
return (!context.No.HasValue && !propVal.SecondaryFilter.HasValue);
}
private static bool MatchedSecondaryFilter(CurrentSearchContext context, TValToMatch propVal)
{
return (propVal.SecondaryFilter.HasValue && context.No.HasValue && propVal.SecondaryFilter.Value == context.No);
}
private bool MatchesParentId(TValToMatch propVal)
{
return (!repo.ParentId.HasValue || repo.ParentId == propVal.ParentId);
}
private static bool MatchesDefinitionId(CurrentSearchContext context, TValToMatch propVal)
{
return propVal.PropertyId == context.Definition.Id;
}
İkinci yaklaşımı tercih ediyorum, çünkü yöntem adlarını yorum olarak görüyorum, ancak problemli olduğunu biliyorum çünkü kodun ne yaptığını anlamak için tüm yöntemleri okumak zorundasınız, bu nedenle kodun amacını ortadan kaldırıyor.
if
. Sorunuz Boole ifadeleriyle ilgili .