У меня есть следующий класс, который изменяет результат некоторого запроса:взаимозависимые свойства в пределах класса
public class UniversalPrincipalQueryOptions
{
public Boolean IncludeProperties { get; set; }
public Boolean IncludeOrganizationUnits { get; set; }
public Boolean IncludeManagers { get; set; }
public static UniversalPrincipalQueryOptions All
{
get
{
return new UniversalPrincipalQueryOptions { IncludeOrganizationUnits = true, IncludeProperties = true, IncludeManagers = true };
}
}
public static UniversalPrincipalQueryOptions None
{
get
{
return new UniversalPrincipalQueryOptions { IncludeProperties = false };
}
}
public UniversalPrincipalQueryOptions()
{
this.IncludeProperties = true;
}
}
Дело в том, установив IncludeOrganizationUnits
в true
когда IncludeProperties
является false
не имеет смысла в моем случае и то же идет за IncludeManagers
, который также зависит от IncludeOrganizationUnits
, установленного на true
.
Я не думаю, что это лучший способ сделать это. Итак, мой вопрос: какой шаблон я могу использовать для улучшения этого класса и облегчить для других использование моего класса?
UPDATE:
Ok, так что я в конечном итоге переход на enum
украшенного Flags
атрибута:
[Flags]
public enum UniversalPrincipalQueryOptions
{
None = 0,
IncludeProperties = 1,
IncludeOrganizationUnits = 2 | IncludeProperties,
IncludeManagers = 4 | IncludeOrganizationUnits
}
«true-ish» имеет смысл в javascript (обычно называемый правдивым), но что означает true-ish для aC# boolean? – Jamiec
В чем вопрос? – ken2k
Не ответ: Но подобное принудительное использование правил является обычным примером, используемым в примерах библиотеки [CodeContract] (http://research.microsoft.com/en-us/projects/contracts/). – Jamiec