Рекомендации - Доступ к списку объектов домена из представления? - PullRequest
0 голосов
/ 03 февраля 2011

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

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

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 04 февраля 2011

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

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

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

1 голос
/ 04 февраля 2011

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

0 голосов
/ 03 февраля 2011

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

0 голосов
/ 03 февраля 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...