Apa yang lebih mudah dipahami, pernyataan boolean besar (cukup kompleks), atau pernyataan yang sama dipecah menjadi metode predikat (banyak kode tambahan untuk dibaca)?
Opsi 1, ekspresi boolean besar:
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));
}
Opsi 2, Kondisi dipecah menjadi metode predikat:
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;
}
Saya lebih suka pendekatan kedua, karena saya melihat nama metode sebagai komentar, tetapi saya mengerti bahwa itu bermasalah karena Anda harus membaca semua metode untuk memahami apa yang kode lakukan, sehingga abstrak maksud kode.
if
pernyataan di salah satu blok kode. Pertanyaan Anda adalah tentang ekspresi Boolean .