我正在尝试自己构建基于机架的Web框架,当我参考Ruby on Rails的设计时我感到困惑。
User
而不是UserModel
一样命名,就像控制器或帮助器一样(例如,UsersController
,PostsHelper
)?Controller
和Helper
后缀有点乏味。Controller::User
,Model::User
。答案 0 :(得分:4)
我认为这是为了方便起见。您永远不会在代码中引用控制器和辅助类,而您始终引用模型类。如果他们被称为UserModel,你会有很多代码,如
user = UserModel.first
post = PostModel.first
这有两个问题:它打破了“在类之后调用实例变量名称”的惯例,这是一个简单的自我记录,而且它很麻烦,有很多重复的信息。
此外,User类实际上代表了一个真实的用户,而UserController类并不代表现实世界中的任何东西,它只是机器的一部分,如果你知道我的意思。
编辑 - 更多答案:
3)命名空间应保留给站点的不同部分,例如管理部分:您可以拥有一个继承自ApplicationController的AdminController,并添加更多位(例如before_filter,用于检查当前是否存在用户和他们是管理员),然后您的其他管理部门控制器继承自AdminController。路线中的命名空间可以轻松管理。
它有一些“在15分钟内创建一个博客”类型的东西,我实际上建议不要潜入,直到你理解底层架构,这在本书的其他地方有很好的解释。太多人在没有理解他们正在做什么的情况下潜入Rails(他们不幸的问题填补了这个论坛)。
答案 1 :(得分:2)
所有关于惯例,都必须做出决定。我不会说铁轨核心,但这是我的想法。
模型 - 在大多数情况下,这是某个事物的单个实例的表示。虽然你可能遇到不是这种情况的情况,但它有助于我概念化它的奇点。即我正在与用户而不是用户打交道
Controller / Helpers / Tablenames - 在数据库中,User模型映射到users表。控制器和帮助程序遵循相同的数据库约定。
命名空间很好,但是只有在明确边界上有意义时才应命名。
一个伟大的ruby框架来看看它不是rails是Lotus - http://lotusrb.org/它大量使用命名空间。