`

rails中分模块开发。

阅读更多
我没事就喜欢拿blog练手,blog简单嘛。

嗯,其实这是一个个人空间,blog只是其中的一个模块,我写的时候就在想,模块一多出来的话,那model目录下的model数量不是很多?对了,看过的rails书籍、guides等材料怎么都没有提到过如何划分模块呢?JE上也许有吧,于是搜索了一下,找到这个:http://www.iteye.com/topic/166325
其中
magicgod 写道
2.0已经有了命名空间,例如:
ruby script/generate model Admin::User

于是我就按照这种方法给model分了模块,像这样
ruby script/generate model Blog::Topic title:string content:text


但是这样会有一个问题,生成的migration中,table名会变成blog_topic,而不是topic,这样在持久化操作的时候rails会找不到topic表。如果手动修改migration的话,一来减少了coc的好处,第二,它还是会有问题:运行一下自动生成的那个unittest,rails会报告找不到blog_topic表……需要手动修改fixtures目录中那些yml文件名,把前面的blog_前缀给删除掉。

看来rails对分模块的开发还不能很好的支持呀,大家平时是怎么做的?不会很少划分模块吧?JE上相关的讨论好像就那一个帖子。

对了,还有其中
liusong1111 写道
我们的controller组织在多层module/目录下,把model全部放在/models下,效果不错。

我有疑问,controller相对于model来说是更粗粒度的,假如给controller分模块了,那model为什么不分?我自己的想法是把model给分了,controller直接放在controller目录下。比如说一个个人空间的blog模块,我要写的话就只有一个BlogsController,和若干个model:Topic,Tag,Comment。每个功能模块对应一个controller我想应该是能做到的,所以我觉得对controller再划分模块好像反而没什么必要。

我想请教一下,大家平时都是怎么组织自己项目中的代码?

===========================================
在“相关帖子”中又找到一个帖子:
http://www.iteye.com/topic/222859

yangzhihuan的方法不错,比起手动修改生成的那些东西好。
yangzhihuan 写道
我的解决方法是:
class Blog::Article < ActiveRecord::Base
  set_table_name :blog_article
end
分享到:
评论
16 楼 kadvin 2009-10-03  
支持下楼上两位的观点
楼主可以把不同的model放在不同的目录,但不需要对model进行分模块。
如果你Rails用的正确的话,你会发现模型之间是相互关联的(associations),分模块反而导致你的模型之间难以联系,或者,你会发现分模块这事,给你带来了很多不必要的违反惯例的声明。
15 楼 fireflyman 2009-09-23  
机器人 写道
我支持楼上的观点,我觉得yuan完全说反了,controller分模块,而model一般不用分。

我也認為model沒必要分模塊,反而是controller不分的話,會很惡搞
14 楼 机器人 2009-09-22  
我支持楼上的观点,我觉得yuan完全说反了,controller分模块,而model一般不用分。
13 楼 liusong1111 2009-09-21  
yuan 写道


对了,还有其中
liusong1111 写道
我们的controller组织在多层module/目录下,把model全部放在/models下,效果不错。

我有疑问,controller相对于model来说是更粗粒度的,假如给controller分模块了,那model为什么不分?我自己的想法是把model给分了,controller直接放在controller目录下。比如说一个个人空间的blog模块,我要写的话就只有一个BlogsController,和若干个model:Topic,Tag,Comment。每个功能模块对应一个controller我想应该是能做到的,所以我觉得对controller再划分模块好像反而没什么必要。




model是对持久层的映射,相对比较稳定。
controller基于model,提供对外功能接口。对于不同的用户身份角色,不同的业务场景和使用上下文,尽管基于同样的数据表,很多时候对外提供的功能都有很大差异,从开发者的角度来看,就是对不同model的任意组合与关联,以及任意数据片段和记录的抽取、加工。例如楼主举的例子,博客管理员的管理界面,普通访问者的阅读、搜索界面,登录用户的评论界面,即是在topics、tags、comments这几个表之上展现的不同功能。
这也往往表征了一个系统的业务复杂性。
12 楼 trace 2009-09-20  
samsam 写道
下一站,火星 写道
samsam 写道
我对resource的controller比较迷惑,每个resource肯定有一个controller,其他的controller按照什么来划分呢

为什么其他的controller不能化为其他的resource?

理论上是可以,但我现在还确实不能把所有controller想象成resource,而且也不直观


RESTful风格的设计有一个很重要的好处,就是规范你的设计,增强代码的可读性。

RESTful就类似设计模式,如果开发团队里都遵循这个模式,那么交流和重用就会很轻松。

比如说你有一个订单(order)模型,它除了数据库字段里的基本属性之外,还有一系列的event,比如generate, cancel, receive, reject, archive等等,如果用RESTful的设计,那么除了order resources之外,还可以设计一个event resources,那么你就可以利用类似"PUT:/orders/23/events/receive"的方式来触发event。

如果一时想不到这个设计,那你完全可以在orders controller里面加一个fire_event的action,但此例一开,则难免泛滥。换个角度想想,如果让你去读别人设计的模块,添加某个功能,你是不是对REST七个方法之外的action感到抵触呢,有可能压根就没法重用,只能copy一份,再写一个额外的action。正是这些额外的action分散了程序员的注意力,使开发越往后越艰难。

Rails的高效率,是建立在良好的设计上的。作为使用RoR的开发者,这个懒偷不得。
11 楼 下一站,火星 2009-09-19  
samsam 写道
下一站,火星 写道
samsam 写道
我对resource的controller比较迷惑,每个resource肯定有一个controller,其他的controller按照什么来划分呢

为什么其他的controller不能化为其他的resource?

理论上是可以,但我现在还确实不能把所有controller想象成resource,而且也不直观

你是典型的restful强迫症,你尽量按照这个原则去设计不就可以了,谁规定100%restful了?
另外 controller != resource,resource = URL + xml/xhtml,设计resource就是设计给你什么请求(uri method),你返回什么数据,这中间涉及很多环节
10 楼 samsam 2009-09-19  
下一站,火星 写道
samsam 写道
我对resource的controller比较迷惑,每个resource肯定有一个controller,其他的controller按照什么来划分呢

为什么其他的controller不能化为其他的resource?

理论上是可以,但我现在还确实不能把所有controller想象成resource,而且也不直观
9 楼 one23 2009-09-19  
下一站,火星 写道
one23 写道
我个人觉得像django这个目录分发清晰的,同一业务相关的controller,model[,view]各自放一目录,
而不是像rails这种,所有controller/model放一controllers/models目录下


你真的不知道rails早八年就有了namespace ?


恩,刚才重新按模型整了下目录,删除了controllers,models目录试了下,设了namespace,确实可以
8 楼 下一站,火星 2009-09-19  
samsam 写道
我对resource的controller比较迷惑,每个resource肯定有一个controller,其他的controller按照什么来划分呢

为什么其他的controller不能化为其他的resource?
7 楼 下一站,火星 2009-09-19  
one23 写道
我个人觉得像django这个目录分发清晰的,同一业务相关的controller,model[,view]各自放一目录,
而不是像rails这种,所有controller/model放一controllers/models目录下


你真的不知道rails早八年就有了namespace ?
6 楼 samsam 2009-09-19  
我对resource的controller比较迷惑,每个resource肯定有一个controller,其他的controller按照什么来划分呢
5 楼 one23 2009-09-19  
我个人觉得像django这个目录分发清晰的,同一业务相关的controller,model[,view]各自放一目录,
而不是像rails这种,所有controller/model放一controllers/models目录下
4 楼 Raecoo 2009-09-18  
rainchen 写道
我估计项目做复杂了,会往engine的模式发展,每个模块都是个子应用(mini app)
对这话题感兴趣但没实践过,留位围观。

推荐用engine划分模块,而且通用的模块还可以复用
3 楼 hozaka 2009-09-18  
module Blog
  class Article < ActiveRecord::Base
  end
end


一直都这么做,不会有 table name 的问题
2 楼 qichunren 2009-09-18  
听说rails3支持这个。
1 楼 rainchen 2009-09-18  
我估计项目做复杂了,会往engine的模式发展,每个模块都是个子应用(mini app)
对这话题感兴趣但没实践过,留位围观。

相关推荐

    ruby on rails社区网站开发源码

    在“ruby on rails社区网站开发源码”中,我们可以学习到如何利用Rails构建一个互动性强、功能丰富的社区网站。以下是一些关键知识点: 1. **安装与环境设置**:首先,你需要安装Ruby和Rails。这通常涉及设置Ruby...

    Rails 敏捷开发实践

    ### Rails 敏捷开发实践 #### 一、引言 《Rails 敏捷开发实践》是一本关于如何高效地利用 Ruby on Rails 进行敏捷开发的经典书籍。本书由蔡望勤(Jesse Cai)撰写,他是一位资深的 Ruby 开发者,自2006年起便致力于...

    ruby on rails最佳敏捷开发

    Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用框架,它遵循敏捷开发原则,致力于简化Web开发过程。Rails的核心理念是“Convention over Configuration”(约定优于配置),这意味着开发者可以减少大量...

    rails敏捷开发,我的成功之路

    ### 知识点一:Rails敏捷开发概述 **标题与描述**:本书《Rails敏捷开发,我的成功之路》是一本详细介绍如何使用Rails框架进行高效、快速的网站开发的专业书籍。作者通过丰富的实例来阐述Rails框架的优势及其在敏捷...

    rails敏捷开发的购物车系统

    在本文中,我们将深入探讨如何使用Rails敏捷开发技术构建一个购物车系统,特别是在参考《rails敏捷开发第四版》中的示例。Rails 3.2.6是本文的基础框架,它是一个强大的Ruby Web应用程序框架,以其MVC(模型-视图-...

    Web开发敏捷之道--应用Rails进行敏捷Web开发 之 Depot代码。

    标题中的“Web开发敏捷之道--应用Rails进行敏捷Web开发 之 Depot代码”表明这是一个关于使用Ruby on Rails框架进行敏捷Web开发的示例项目,名为Depot。Ruby on Rails(简称Rails)是一个开源的Web应用程序框架,它...

    使用 Ruby on Rails 和 Eclipse 开发 iPhone 应用程序教程(含图例)

    【使用 Ruby on Rails 和 Eclipse 开发 iPhone 应用程序教程】是一个面向中级开发者的系列教程,旨在教读者如何利用 Ruby on Rails 框架在服务器端为 Mobile Safari 设计和提供自定义内容,以适应 iPhone 和 iPod ...

    ruby on rails for eclipse开发插件

    ruby on rails for eclipse开发插件

    ruby on rails web敏捷开发第四版(英文)

    ### Ruby on Rails Web 敏捷开发第四版 #### 关于本书的重要信息 《Ruby on Rails Web 敏捷开发第四版》是一本专为希望深入了解 Ruby on Rails 的开发者编写的书籍。该书主要针对 Rails 3 版本进行讲解,因此对于...

    ruby on rails(开发文档)

    7. **Helper方法**:为了保持视图的简洁,Rails允许你在helper模块中定义辅助方法,然后在视图中调用。 8. **测试驱动开发(TDD)**:Rails鼓励使用测试来驱动开发,内置了Test::Unit和RSpec等测试框架。 9. **...

    Ruby.on.Rails.Web开发之旅

    Ruby.onRuby.on.Rails.Web开发之旅

    ruby on rails 开发环境包(ruby1.8.7,rails2.2.3)

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson创建的一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性。在这个开发环境包中,我们拥有Ruby ...

    学习Ruby on Rails进行Web开发(英文版)

    本资料介绍了使用Ruby on Rails进行Web开发的相关知识。本书从对Rails的初印象讲起,包括其安装的困难到后来发现其使用的便捷性。接着详细介绍了Rails的开发环境、版本控制、应用部署等内容,通过实际案例逐步引导...

    Ruby on Rails实例开发

    Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性,同时强调“约定优于配置”的原则。在本实例开发中,我们将探讨如何...

    Ruby+on+Rails快速Web应用开发实战.pdf

    - **Rails的主要特性**:Rails采用了约定优于配置(Convention over Configuration)的设计理念,这使得开发过程中的很多设置能够自动完成,从而加快了开发速度。 ### Ruby编程语言 - **Ruby语言**:Ruby是一种...

    使用Aptana+Rails开发Rails Web应用(中文)

    在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...

    Ruby on Rails Web开发学习实录随书光盘(源代码).

    在学习Rails之前,你需要掌握Ruby的基本语法,包括变量、数据类型、控制结构、类与对象、模块等概念。 2. **Rails框架核心概念**:Rails的核心概念包括路由(Routes)、控制器(Controllers)、模型(Models)、...

    Web开发敏捷之道-应用Rails进行敏捷Web开发 pdf

    《Web开发敏捷之道——应用Rails进行敏捷Web开发》是一本深度探讨如何利用Ruby on Rails框架进行高效、敏捷的Web应用程序开发的专业书籍。该书涵盖了从初学者到高级开发者所需的各种知识,旨在帮助读者掌握敏捷开发...

    Ruby On Rails开发实例-源代码

    "Ruby中文文档"可能包括了对Ruby语法、类、对象、模块、方法等基础知识的介绍,以及Rails框架的核心概念,如路由(Routing)、控制器(Controllers)、视图(Views)、模型(Models)、ActiveRecord、助手方法...

Global site tag (gtag.js) - Google Analytics