Что-то, с чем я борюсь, более философски, я полагаю, заключается в том, должны ли элементы DropDownList (или действительно любые элементы списка выбора) быть частью модели или они должны быть жестко закодированы в пользовательском интерфейсе или бизнес-уровне. Или, возможно, это хорошее использование ViewModel?
Для некоторых типов раскрывающихся списков вы, очевидно, должны сделать их частью модели. Например, модель должна создать раскрывающийся список идентификаторов заказов, связанных с клиентом.
Другие виды, которые я бы назвал «поисковыми» данными, менее понятны для меня. Пол, например. Зачем заставлять поиск туда и обратно заполнять поле двумя элементами? Возможно, это преждевременная оптимизация, но если у вас есть 50 полей, это много циклов обхода только для заполнения одной страницы. Конечно, кеширование может пригодиться, но оно выглядит неуклюжим.
Я также опасаюсь, что добавление всех этих списков поиска в модель излишне загромождает ее. Особенно, если у вас их много.
Существует также вариант не жесткого кодирования в пользовательском интерфейсе, а жесткого кодирования на бизнес-уровне. Возможно, даже создание класса, который ничего не делает, кроме как заполняет эти данные.
Если ответ таков, вы все равно должны сделать их частью модели данных, тогда возникает проблема, должна ли ваша модель данных иметь разные таблицы для каждого набора полей поиска. Если ваша модель данных имеет 200 или 300 таких полей, это 200 или 300 таблиц, и это действительно усложняет поддержку вашей модели данных.
Некоторое время назад я задал вопрос о наличии общей таблицы поиска, и все пришли к выводу, что это плохая идея. Но для приложений с очень большим объемом данных, где много полей, я сомневаюсь.
Я знаю, что многие из вас скажут: «Это зависит от обстоятельств», но я смотрю на «общий» ответ. В общем, при чем тут правило?