代码之家  ›  专栏  ›  技术社区  ›  Thierry Lam

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

  •  4
  • Thierry Lam  · 技术社区  · 14 年前

    在Django中,存在一个消息框架,在执行操作后通知用户。例如,从 views.py 可能有如下情况:

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

    我相信Rails有类似的功能:

    flash[:notice] = 'Something is missing'
    

    上面的消息应该在控制器中硬编码吗?

    4 回复  |  直到 14 年前
        1
  •  2
  •   Master Morality    14 年前

    如果我理解您的问题,您会问是否应该将字符串值硬编码到代码中。在编译语言中,通常使用对字符串的引用,而不是输入实际的字符串。阿拉巴马州:

    message.success(request, message_resource.success )
    

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

    因为 蟒蛇 是动态的,这确实不是必需的,但取决于项目的大小,可能是有益的。

    设想一种情况,在这种情况下,说不同语言的人使用软件,您可以在代码中的其他地方检测到所需的语言并初始化 message_resource.success 以及任何其他字符串。

    下面是一个简单的例子:

    德语.py

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

    英语.py

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

    主.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
  •  2
  •   buddhabrot    14 年前

    在Rails中,任何可编组的对象都可以放在flash中。 因此,最好在视野内进行。

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

    在控制器中输入文本和翻译确实有点难看。

        3
  •  2
  •   S.Lott    14 年前

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

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

    这个模型主要是静态的、最终的、持久的东西。被动的。“什么”。

    模型出了问题。事情是由控制器启动的。

    消息来自控制器,用于向人员演示。

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

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

    “控制器”(查看功能)执行I18N转换并显示消息。

        4
  •  1
  •   nate c    14 年前

    一般性示例

    • 模型:方法 is_missing() 如果它只依赖于数据,那么将进入模型。

    • 控制器:从模型为视图整理数据: missing = Suff.get_by_id(1).is_missing()

    • 观点: <span>{$missing}<span>

    但你在哪里画出这些线总是值得争论的。在你的例子中,我会说 flash , success warning 他们越界了 怎样 呈现数据,并且在视图中更好,因为它们是通用的数据呈现者。