2016-02-03 4 views
2

Я создаю специальное решение отчетности, поэтому я придумал этот метод, его добавляют в WCF службе, которая будет вызвана из переднего конца клиента,Должен ли я избегать нескольких булевых параметров?

GetEmployeeDetails (INT идентификатора, BOOL includeAddressHistory, BOOL includeSalaryHistory , BOOL includePositionHistory, BOOL includeProjectHistory ... бесконечный список)

Теперь вопрос я должен получить все данные, основанные на фильтрах, а затем либо возвращают полный набор данных или вернуть его как поток, как и У меня есть другой метод, который возвращает тот же набор данных, что и поток,

+1

Переворот флагов, как предлагается в ответах (теперь удалено по странной причине), будет хорошим выбором здесь (в моем * мнении *) - похоже, вам нужно поддерживать комбинации нескольких историй, что именно то, что «Флаги 'перечисления предназначены для -' IncludeHistoryFor.Address | IncludeHistoryFor.Salary'. –

+0

@AlexeiLevenkov Я не уверен, как я могу реализовать перечисления в этом случае: S – Mathematics

+1

Реклама: компания, в которой я работаю, также предоставляет поисковую систему (для поиска тем о C# на MSDN) - попробуйте https://www.bing.com/search? q = c% 23 + flags + enum (или использовать любую другую поисковую систему по вашему выбору) –

ответ

2

Обычно, когда вам нужно пройти достаточно большое количество параметров (независимо от их типа), пришло время рассмотреть вопрос о parameter object:

// this is just POCO 
public class SearchParameters 
{ 
    public string SomeString { get; set; } 
    public DateTime? SomeDate { get; set; } 
    public bool? SomeBool { get; set; } 
    // etc... 
} 

IEnumerable<SomeEntitites> GetSomeEntitites(SearchParameters searchParameters); 

Обратите внимание, что для случаев конструктора решения может быть образец строителя ,

1

Альтернативой, если все становится еще сложнее, является наличие одного класса, в котором определены параметры EmployeeDetailsRequestParameters. Это особенно полезно, если вы также делаете такие вещи, как фильтрация, и имеете гораздо больше, чем просто то, что может вписаться в флаг, который можно перечислить.

Смежные вопросы