消息应该驻留在网站/ Web应用程序的控制器或模型中吗?

时间:2010-11-24 16:50:38

标签: ruby-on-rails django web-applications

在Django中,存在一个消息框架,在执行操作后通知用户。例如,从views.py可能有类似的内容:

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

我相信Rails有类似的东西:

flash[:notice] = 'Something is missing'

上述消息是否应在控制器中进行硬编码?

4 个答案:

答案 0 :(得分:2)

在Rails中,任何可编组对象都可以放入闪存中。 因此,最好在视图中执行此操作。

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

在控制器中放置文本和翻译确实有点难看......

答案 1 :(得分:2)

消息是事件。发生的事情。这就是MVC的“控制器”部分。 “如何”。

(Django称之为“视图函数”。)

该模型(大部分)是静态的,最终的,持久的。被动。 “什么”。

事情发生在模特身上。事情由控制器发起。

消息来自控制器,以便呈现给此人。

模型的方法可能需要提供有关状态变化的一些证据或信息。这不是模型创建的消息的示例。如果模型具有进行突变/更新/状态更改的方法,那么您必须将事物分成两部分。

“控制器”(即Django视图函数)必须使用模型的API进行状态更改并收集有关该状态更改的任何信息。

“控制器”(视图功能)执行I18N翻译并显示消息。

答案 2 :(得分:2)

如果我理解你的问题,你就会问你是否应该将字符串值硬编码到你的代码中。在编译语言中,您经常使用对字符串的引用,而不是输入实际的字符串。丙氨酸:

message.success(request, message_resource.success )

这使您可以自由更改字符串值而无需重新编译代码,并且在某些情况下具有性能优势。

因为 Python 是动态的,所以这不是必需的,但取决于项目的大小,可能是有益的。

想象一下,在说不同语言的人使用该软件的情况下,您可以在代码中的其他位置检测所需的语言,并初始化message_resource.success以及任何其他字符串,使用所述语言。< / p>

这是一个简单的例子:

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

答案 3 :(得分:1)

通用示例

  • 模型:方法is_missing()将放在模型中,如果它仅依赖于数据。

  • 控制器:来自视图模型的编组数据:missing = Suff.get_by_id(1).is_missing()

  • 查看:<span>{$missing}<span>

但确切地说,你绘制这些线条的地方总是争论不休。在您的示例中,我会说flashsuccesswarning如何呈现数据方面超越了它们的界限,并且在查看,因为他们是通用数据演示者。