【发布时间】:2011-10-04 06:49:26
【问题描述】:
所以,这里是它的缩写,这是一个新手问题,所以请耐心等待...我正在为我的公司构建一个公告板类型的应用程序作为 Rails 概念验证应用程序。
公告板正在替换现有功能,因此限制非常严格。最大的限制是内容分为三个级别:板、主题和回复。您无法回复回复(至少,系统不会为您提供帮助)——这是故意的,超出了本问题的范围。
现在,主题和回复具有共同的特点:它们都是用户生成的内容,都可以进行审核,有正文,由用户发布等。一位同事建议我简单地将这些对象设为一个称为“帖子”的概念的专业化,然后也将此帖子用于公告板(因为公告板也有标题和内容......长篇大论)。
所以我已经使用 post 模型构建了应用程序,并且我已经使用控制器和路由魔术完成了其他所有操作;我有一个 TopicsController 和一个 BoardsController(回复逻辑通过自定义操作在 TopicsController 内部处理)。我在路由文件中构建了嵌套命名空间,以便我可以执行以下操作:http://foo.com/boards/1/topics/2 等。
这位同事(他在我没有 Rails 的经验时有经验,所以我相信他的话)声称我应该做这个伪多态设计,因为我们最终会有其他内容——例如产品评论—— - 这将具有相似的内容(用户生成的文本,可能会被审核)- 如果我们可以简单地绑定到一个数据库表,那就容易多了。
他还建议我应该通过模块 mixins 在产品评论等中实现“额外”功能,而不是多态。我不确定这是对简单多态性或通过表连接实现的多态性(其中额外信息通过数据库关系绑定)实现的改进。
但是随着这个版本越来越大,我对此表示怀疑。只是……感觉不对。首先,虽然模型中存在多态性,但我不能 100% 确定最好的实现是什么;在某些方面,主题和回复有共同的元素 - 两者都有内容并且可以进行审核 - 但在其他方面它们非常不同(例如,回复没有主题)。而且板子甚至不是由最终用户创建的;它们是版主创建的。产品评论根本不像主题或回复。相反,它们与特定产品相关联。
我构建的越多,我就越觉得我们有“你所拥有的只是一把锤子”综合症;我们看到主题、回复、版块和产品评论看起来都“有点相似”,所以我们试图将它们强加到继承树中。事实上,我发现自己不得不越来越努力地对抗 Rails 框架,以添加自定义路由和操作、覆盖默认模型属性等等。
那么,我的问题是:社区对此有何看法?我们是否应该简单地为板、主题和回复提供单独的表格和模型?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3.1