समझने में आसान क्या है, एक बड़ा बूलियन स्टेटमेंट (काफी जटिल), या एक ही बयान प्रेडिकेट विधियों (पढ़ने के लिए बहुत सारे अतिरिक्त कोड) में टूट गया?
विकल्प 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
बयान नहीं है । आपका प्रश्न बूलियन अभिव्यक्तियों के बारे में है ।