我们现在有个 APP 项目,基本上很多的数据库操作的一些逻辑都放在了控制器里面;之前是学 java 的,MVC 模式,也略知一二,是不是应该将业务逻辑和控制器分开呢?其实 java 和 ruby 我都是新手 - -,有木有资深能详解下 rails 项目的架构和目录结构!!!
这是内功 不好详细说 理论上你可以把代码写在任何地方:controller model context service observer decorator lib 甚至 helper 但是具体业务代码怎么划分就需要详细规划了 推荐阅读 gitlab 源码 比较清晰
看 Rails Guides 写的很清楚,业务逻辑放到 model 中。
http://guides.rubyonrails.org/active_record_basics.html#what-is-active-record-questionmark
业务逻辑放 model 一直是 Rails 的传统。
最近一年有反动思潮称 ActiveRecord 应该只负责 persistence, 把业务逻辑放入其他。DHH 反对这个并拿出 GOF 的 ActiveRecord pattern 做论据。
我自己的看法是,简单一点的逻辑就没所谓。但多了的话,由 model 负责太多其实违反了 SRP, 我觉得只管 persitence 会比较清爽。
Fat Model, Skinny Controller http://www.sitepoint.com/10-ruby-on-rails-best-practices/
#17 楼 @shihangw Fat Model 现在也有人认为不妥了哇,参看这篇博文:http://solnic.eu/2011/08/01/making-activerecord-models-thin.html
#24 楼 @beyondyuqifeng 这个看你需要,不过我觉得直接用自动产生的测试数据库(比如 fatory girl)来测试更靠谱,多搞一层就是为了绕开数据库没有必要。当然如果 model 太肥,把 model 中的 code 迁移出去是必须的,得具体问题具体分析,就像这篇一样 http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/
@skandhas 那就是"Patterns of Enterprise Application Architecture", 记不太清楚了。总之 DHH 是引用了 Martin Flower 的网页:http://www.martinfowler.com/eaaCatalog/activeRecord.html
他的原话我没记录,看过就看过了。大意是让看 UML 里面几个 methods, 这些超出了简单的 persistence
#24 楼 @beyondyuqifeng Don't over-engineer, don't under-engineer. Make it just right for the thing you are building.在理 - -