Điều gì dễ hiểu hơn, một câu lệnh boolean lớn (khá phức tạp) hoặc cùng một câu lệnh được chia thành các phương thức vị ngữ (rất nhiều mã bổ sung để đọc)?
Tùy chọn 1, biểu thức boolean lớn:
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));
}
Tùy chọn 2, Các điều kiện được chia thành các phương thức vị ngữ:
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;
}
Tôi thích cách tiếp cận thứ hai, vì tôi xem tên phương thức là nhận xét, nhưng tôi hiểu rằng nó có vấn đề vì bạn phải đọc tất cả các phương thức để hiểu mã làm gì, vì vậy nó trừu tượng hóa ý định của mã.
if
câu lệnh nào trong cả hai khối mã. Câu hỏi của bạn là về biểu thức Boolean .