2011-02-03 3 views
0

Просто интересно, если (в Grails/Java) было плохой практикой вызывать: Foo.list() в представлении/gsp проекта MVC, а не передавать его через модель (т.е. foos: Foo.list()) и использовать это?Лучшая практика - Доступ к списку объектов домена из представления?

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

Заранее благодарен.

+1

Это комментарий, потому что я ничего не знаю о Grails ... Обычно я начинаю с разрешения таких простых вещей, а затем рефакторинга, как только начинаю в зависимости от модели и функции, которая обычно предоставляет модели свой контент , Когда это произойдет, я знаю, что сложность достаточно высока, чтобы всегда проверять модель, даже если модель просто делегирует функцию в фоновом режиме. – Crisfole

ответ

1

Что вы делаете, как правило, считается плохой практикой. Причина очень проста: ваше мнение сильно связано с вашей моделью. Давайте выясним последствия:

  1. Если вам нужно отфильтровать возвращенный список, вам нужно будет сделать это внутри своего вида. Например, представьте, что вы хотите отобразить список экземпляров Foo с включенной разбиением на страницы. Поэтому вам необходимо указать параметр max, и он будет использоваться как Foo.list(max: params.max)в вашем представлении. max - это параметр из сотен, который вы можете себе представить (порядок, сортировка ...). Таким образом, ваше представление зависит не только от экземпляра домена, но также зависит от параметров запроса, и вы должны их обработать.
  2. Самое главное, что вам придется дублировать этот код, когда вам нужно будет отображать те же данные, что и JSON (например, с Ajax) или XML или что-то еще. И эта плохая практика, не поддерживаемая и подверженная ошибкам.

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

0

Я бы сказал, что во время фаз прототипа такие утверждения «несколько» приемлемы.

Но, что более реалистично, все это просто не очень важно в производственном коде. Когда вы начинаете манипулировать данными или говорите, извлекаете много разных объектов и делаете что-то с ними, вы обнаружите, что можете захотеть вернуть что-то совершенно иное в слой пользовательского интерфейса ...

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

Кроме того, вы ответили на свой вопрос: да, я считаю это плохой практикой.

+2

Я не собираюсь ниспровергать, но это не приемлемо. Остальная часть вашего ответа в порядке ... – hvgotcodes

+2

Проблема с плохими практиками, когда вы находитесь «в режиме прототипа», часто не фиксируется, когда вы находитесь в реальном режиме, дерьмо распространяется и копируется/вставленные неопытными разработчиками, которые не знают лучше. –

0

Я согласен, что это плохая практика. Даже если это во время прототипирования, передача его с контроллера не похожа на то, что он добавит много дополнительного времени.

1

Очень практичная причина не в том, что вы можете в конечном итоге захотеть использовать один и тот же вид из разных действий, в результате чего вы в конечном итоге фильтруете данные. Возможно, вы не всегда хотите обрабатывать Domain.list().

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