【问题标题】:Action Naming Convention动作命名约定
【发布时间】:2010-09-12 05:17:05
【问题描述】:

是否有人为 MVC 中的操作建立了良好的命名约定?我专门研究了 ASP.net MVC,但这是一个普遍的问题。例如,我有一个显示登录屏幕 (Login) 的操作和一个处理来自该页面的登录请求 (LoginTest) 的操作。我对名字不感兴趣,我还有很多申请要写。

【问题讨论】:

    标签: asp.net-mvc model-view-controller


    【解决方案1】:

    MS 的 Rob Conery 建议了一些有用的 RESTful 风格的动作命名。

    * Index - the main "landing" page. This is also the default endpoint.
    * List - a list of whatever "thing" you're showing them - like a list of Products.
    * Show - a particular item of whatever "thing" you're showing them (like a Product)
    * Edit - an edit page for the "thing"
    * New - a create page for the "thing"
    * Create - creates a new "thing" (and saves it if you're using a DB)
    * Update - updates the "thing"
    * Delete - deletes the "thing"
    

    导致 URL 类似于(对于论坛)

    * http://mysite/forum/group/list - shows all the groups in my forum
    * http://mysite/forum/forums/show/1 - shows all the topics in forum id=1
    * http://mysite/forums/topic/show/20 - shows all the posts for topic id=20
    

    Rob Conery on RESTful Architecture for MVC

    【讨论】:

    • 我还看到,使用最新的 MVC,您可以设置动作接受哪些动词,这样您就可以为初始页面加载和保存信息的动作命名。
    • 似乎来自 Rob Conery 的帖子早于能够提供相同名称的显示表单和处理表单方法的能力。我还注意到 Nerd Dinner 示例具有 Edit,但 Controller 模板具有用于修改实体的 Update。
    • 我喜欢这个 - 唯一的问题是您最终会在项目中使用相同名称的多个视图文件(例如“编辑”),这使得在 VS 中打开大量文件时会感到困惑。有人知道一个简洁的解决方案吗?我目前将视图称为“EditProduct”、“ViewProduct”等。
    • 链接失效 - Archive.org 上有一个快照 - web.archive.org/web/20130119131317/http://wekeroad.com/2007/12/…
    【解决方案2】:

    Rails 对 CRUD 操作有一个很好的操作命名约定:Rails Routing from the Outside In

    HTTP Verb Path Controller#Action Used for GET /photos photos#index display a list of all photos GET /photos/new photos#new return an HTML form for creating a new photo POST /photos photos#create create a new photo GET /photos/:id photos#show display a specific photo GET /photos/:id/edit photos#edit return an HTML form for editing a photo PATCH/PUT /photos/:id photos#update update a specific photo DELETE /photos/:id photos#destroy delete a specific photo

    这本质上是对Paul Shannon's answer 的更新, 因为他的消息来源(Rob Conery)含蓄地说他从 Rails 复制了他的列表。

    【讨论】:

      【解决方案3】:

      我找到了一个blog post by Stephen Walther,对于找到一致的命名方案很有用。他也源自 REST 风格的命名方案,他解释了一些独特的例外情况。

      【讨论】:

      【解决方案4】:

      Stephen Walther 在ASP.NET MVC Tip #11 – Use Standard Controller Action Names 上的帖子可能会澄清您关于MVC Action 命名约定的命名约定...

      【讨论】:

        【解决方案5】:

        内置的 Django 动作后缀为 _done。所以 LoginDone 将是处理登录的页面(在 ASP.NET MVC 驼峰样式中)。

        【讨论】:

        • 没关系,但这意味着登录已经完成,而完成的操作正在处理登录。也许是 PromptLogin 和 Login。
        【解决方案6】:

        您使用哪种约定来命名控制器动作是相当不相关的,只要它对您来说是一致的并且易于被使用它的人理解即可。

        就您的登录操作而言,LoginDone 很好,同样,ProcessLogin 也很容易理解,因此请使用您觉得舒服的约定。

        就我个人而言,我可能会支持 Login 和 ProcessLogin,因为 LoginDone 可能会稍微误导 Action 正在做什么——这当然是假设 Action 正在对用户的凭据做出反应并检查它们是否有效。然后,您可以在登录成功后传递到另一个名为 LoginDone 的操作,如果不是,则传递到 LoginFailed。

        【讨论】:

          猜你喜欢
          • 2016-02-04
          • 1970-01-01
          • 2018-08-27
          • 1970-01-01
          • 2016-09-23
          • 2023-03-03
          • 2010-10-31
          • 2021-12-27
          • 2010-11-14
          相关资源
          最近更新 更多