Должны ли сообщения находиться в контроллере или модели веб-сайта / веб-приложения? - PullRequest
4 голосов
/ 24 ноября 2010

В Django существует структура сообщений, которая уведомляет пользователя после выполнения действия.Например, из views.py может быть что-то вроде:

if success:
    messages.success(request, 'Update Successful')
else:
    messages.warning(request, 'Something is missing')

Я считаю, что в Rails есть что-то похожее с:

flash[:notice] = 'Something is missing'

Если вышеприведенные сообщения жестко закодированы в контроллере

Ответы [ 4 ]

2 голосов
/ 24 ноября 2010

Если я понимаю ваш вопрос, вы спрашиваете, стоит ли вам жестко кодировать строковое значение в своем коде. В скомпилированных языках вы часто используете ссылку на строку вместо ввода фактической строки. ала:

message.success(request, message_resource.success )

Это дает вам свободу изменять строковое значение без повторной компиляции кода и в некоторых случаях дает выигрыш в производительности.

Поскольку Python является динамическим, это действительно не требуется, но в зависимости от размера проекта может быть полезным.

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

Вот простой пример:

german.py

# german language messages
success = "Sie folgten!"
failure = "Sie fallen aus!"

english.py

#english language messages
success = "You succeeded!"
failure = "You fail!"

main.py

# main

# import english language
message_resource = __import__('english');

print message_resource.success
print message_resource.failure

# import german language
message_resource = __import__('german');

print message_resource.success
print message_resource.failure
2 голосов
/ 24 ноября 2010

Сообщения - это события. Вещи, которые случаются. Вот что такое «контроллерная» часть MVC. «Как».

(Джанго называет это «функциями просмотра».)

Модель - это (в основном) вещи, которые статичны, окончательны, постоянны. Пассивный. «Что».

Вещи случаются с моделью. Вещи инициированы контроллером.

Сообщения приходят от контроллера для представления человеку.

Вполне возможно, что метод модели может потребовать предоставления каких-либо доказательств или информации об изменении состояния. Это не пример сообщения, создаваемого моделью. Если в модели есть методы, которые выполняют мутацию / обновление / изменение состояния, то вам нужно разбить вещи на две части.

«Контроллер» (т. Е. Функция представления Django) должен использовать API модели для изменения состояния и сбора любой информации об этом изменении состояния.

«Контроллер» (функция просмотра) выполняет перевод I18N и представляет сообщение.

2 голосов
/ 24 ноября 2010

В Rails любой маршаллизируемый объект может быть помещен во флэш-память. Поэтому лучше сделать это в виде.

<% if flash[:notices] && flash[:notices][:missing] %>
<div><%= t("Somethign missing") %></div>
<% end %>

Помещать текст и переводы в контроллеры действительно немного некрасиво.

1 голос
/ 24 ноября 2010

общие примеры

  • Модель: метод is_missing() будет использоваться в модели, если он зависит только от данных.

  • Контроллер: сбор данных из модели для представления: missing = Suff.get_by_id(1).is_missing()

  • Представление: <span>{$missing}<span>

Но именно то, где вы проводите эти линии, всегда подлежит обсуждению.В вашем примере я бы сказал, что flash, success и warning переступают свои границы на , как для представления данных, и было бы лучше в представлении, так как они являются представителями общих данных.

...