Concern 与 Service Object 的使用场景
11 June, 2014
虽然大家都说一个健康的 Rails 项目应该「胖 Model,瘦 Controller」。但 Model 胖到几百行,也会惨无人睹。我最近正在尝试用 ActiveSupport::Concern 或 Service Object 将 Model 中的逻辑剥离处来,以下是我的使用心得。
哪些方法应该放到 Service Object?
-
方法内部需要多个 Model 通力合作
比如当订单发货后,
step1 发送邮件(OrderMailer.alert)
step2 发送短信(SMS#send)
step3 抓取快递信息(Shipment#fetch)
-
依赖第三方服务的方法
比如通过接口抓取物流信息
哪些方法应该放到 ActiveSupport::Concern?
某方法被多个 Model 复用时,应该剥离到 Concern 中,比如:Trashable, Searchable, Visible, Movable, Taggable 等等。
其他的场景暂未想到…