Использование Enums для выбора диапазона в OO-приложении - PullRequest
1 голос
/ 30 июля 2011

Я работаю над проектом, который имеет большое количество форм, которые пользователи будут заполнять для создания окончательного отчета. Большинство этих вопросов имеют множественный выбор. Я борюсь с правильной архитектурой для классов в приложении.

Ради разговора, скажем, это отчет об автоответчике. Объектно-ориентированный подход диктует, что мы создаем структуры на основе информации, содержащейся в каждом вопросе. Таким образом, у нас есть такие классы, как «Транспортное средство», «Авария» и т. Д. Но как насчет вопроса, например, «с какой скоростью движется транспортное средство при столкновении», когда пользователям предоставляется выбор из 4 ответов?

  • Менее 10 миль в час
  • 11-30mph
  • 31-50mph
  • Более 50 миль в час

Как правильно хранить эту информацию в классе? Моим первым соображением было перечисление:

enum CollisionSpeed {
   LessThan10,
   ElevenToThirty,
   ThirtyOneToFifty,
   MoreThanFifty
}

Но это выглядит грязно, поскольку основывает структуру данных на представлении. Кроме того, если в будущем они изменят диапазоны, мы также должны изменить enum.

Итак, вопрос в том, как вы справляетесь с выбором диапазона, подобным этому, с объектно-ориентированным подходом?

Спасибо!

1 Ответ

1 голос
/ 30 июля 2011

Если это действительно универсальный и у вас есть большое количество вопросов , вы можете проверить, является ли денормализация правильным подходом. Вместо того, чтобы моделировать каждую отдельную тему в каждом конкретном случае, вы можете предоставить слой абстракции, например, например, бизнес-пользователи могут добавить еще вопросов без участия ИТ-специалистов. Упрощенный пример (псевдокодирование):

class QuestionEntity {
    String question;
    enum type; // e.g. open question (freetext), closed question (check boxes), etc.
    String[] values // if it's a closed question
}

Как уже упоминалось выше, это довольно упрощено. Поскольку я точно знаю ваши точные требования, я не могу судить, имеет ли это смысл в вашем случае. На самом деле речь идет о разработке DSL для конкретных случаев использования.

Возможно, ответ не такой конкретный, как вы ожидали, но он пришёл мне в голову, когда я прочитал ваш вопрос ...

...