2010-06-18 2 views
7

Мне было интересно узнать, является ли установка значения по умолчанию для SelectList логикой представления или бизнес-логикой? Например, если требование состоит в том, что Работник не может быть сохранен без местоположения, но в 99% случаев местоположение, которое будет выбрано, является определенным элементом, например, в Атланте. Из-за этого местоположение SelectList должно быть отправлено по умолчанию в Атланту, когда отображается экран ввода для нового сотрудника. Должен ли я по умолчанию устанавливать местоположение в модели или в модели просмотра? Одна вещь, которую я понял, заключается в том, что модульные тесты становятся неудобными, потому что в обоих случаях я был бы вынужден протестировать место, которое всегда будет присутствовать в производстве, но я не могу создать единичный тест с моими собственными тестовыми данными, если только «Атланта» не была в наборе мест, используемых в тесте. Я был бы бод, если бы у вас были какие-то мысли по этому поводу.Настройка значения по умолчанию - логика представления или бизнес-логика?

ответ

4

Как и во многих таких вопросах (субъективных), ответ: «Это зависит».

Если «значение по умолчанию» является бизнес-дефолтом (например, местоположение по умолчанию для бизнес-местоположения или количество единиц по умолчанию в заказе или что-то подобное), это, вероятно, бизнес-уровень. Это кажется правильным для вашей конкретной ситуации здесь.

Однако, если «значение по умолчанию» вашего списка просто потому, что вам нужно какое-то значение по умолчанию, и вы просто собираетесь выбрать индекс 0 или просто собираетесь выбирать на основе местоположения или системы пользователя настройки, я бы подумал, что это будут проблемы уровня представления.

+0

Если значение по умолчанию было в моей модели сотрудника, мне не пришлось бы жестко кодировать имя для местоположения по умолчанию. , например. частное местоположение; общественности Расположение Расположение { получить { если (место == NULL) расположение = новый Расположение (1, "Атланта", ...) возвращение место; } set {location = value; } Это приемлемо? – SideFX

+0

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

0

Я бы подумал, что значения по умолчанию - это бизнес-логика.

Например, если компания передислоцирует местоположение по умолчанию, это больше не «Altanta» или «London», а «New York» или «Nottingham».

3

Из-за этого местоположение SelectList должно быть установлено по умолчанию в Location5, когда отображается экран ввода для нового сотрудника. Должен ли я по умолчанию устанавливать местоположение в модели или в модели просмотра?

Это бизнес-логика в вашем примере, но это не помешает вам получить торт и есть его в этом случае. Модель может указывать значение по умолчанию; представление затем инициализирует себя этим значением по умолчанию.

В целом, независимо от того, является ли это «бизнес-логика» или «логика представления», зависит от того, относится ли она к домену или нет. Например, установка самого раннего года в раскрывающемся списке даты, скажем, в 1900 году, вероятно, связана с представлением. Но это также может быть проблемой для бизнеса, если система не предназначена для принятия дат раньше 1900 года.

Одна вещь, которую я понял, заключается в том, что модульные тесты становятся неудобными, потому что в обоих случаях я был бы вынужден для тестирования на месте, которое всегда будет присутствовать в производстве, но я не могу создать единичный тест с моими собственными тестовыми данными, если только «Атланта» не была в наборе мест, используемых в тесте. Я был бы бод, если бы у вас были какие-то мысли по этому поводу.

Со стратегией, о которой я говорил выше, модульное тестирование легко. Просто убедитесь, что:

  • модель обеспечивает значение по умолчанию
  • вида принимает значение по умолчанию
  • вид инициализирует себя это значение по умолчанию
  • вид имеет соответствующее поведение или нет модели что значение
0

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

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