จะเข้าใจอะไรได้ง่ายกว่าคำสั่งบูลีนขนาดใหญ่ (ค่อนข้างซับซ้อน) หรือคำเดียวกันนี้แบ่งออกเป็นเมธอดเพรดิเคต (มีโค้ดพิเศษมากมายให้อ่าน)
ตัวเลือก 1 นิพจน์บูลีนขนาดใหญ่:
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));
}
ตัวเลือก 2 เงื่อนไขแบ่งออกเป็นวิธีเพรดิเคต:
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;
}
ฉันชอบวิธีที่สองเพราะฉันเห็นชื่อวิธีเป็นความคิดเห็น แต่ฉันเข้าใจว่ามันเป็นปัญหาเพราะคุณต้องอ่านวิธีการทั้งหมดเพื่อทำความเข้าใจว่าโค้ดทำอะไรดังนั้นจึงสรุปเจตนาของโค้ด
if
ในบล็อกของโค้ด คำถามของคุณเป็นเรื่องเกี่ยวกับการแสดงออกบูลีน