Ruby on Rails的最佳做法

红宝石宝石

今天,我们将讨论使用MVC框架时众所周知的良好实践。 谁从未听说过“肥胖模型,瘦身控制器”这句话?
那是一个非常普遍的想法。 但是,有很多方法可以帮助您使我们的模型,视图和控制器变得更加瘦弱。 这可以帮助您进行更好的测试,并使代码可重复使用。
在本文中,我们将讨论方法和类中逻辑的分离,以及如何不将所有代码仅保留在模型,视图或控制器中。
首先,让我们记住MVC架构模式以及每个职责是什么。 基本上,MVC代表模型,视图,控制器,其主要目标是将逻辑分为三个主要层。

模型:负责表示数据,数据验证,业务逻辑以及与数据相关的所有事物。

查看:它向用户显示信息。

控制器:它是模型和视图之间的中间层。 它通过路由器接收用户请求,然后向模型询问数据并在视图中显示响应。

这里要强调的重要一点是,并非所有内容都应保存在这三个地方。 当您打算干燥应用程序时,其他一些类确实很有用。 让我们开始谈论它。

帮手

Rails允许您使用助手,以便您可以从视图中提取逻辑。 如果需要格式化或在显示之前进行验证,则应使用它。 例如,不要这样做:

 
  
  

你应该做这个:

 模块ProductHelper
   def product_price(产品)
     product.price是否为product && product.price.present?
  结束
结束 

然后,在您的视图中,您只需要调用预定义的方法。 像这样:

   

这样,您可以轻松地测试您的助手,也可以多次重用它,而不必将逻辑带到视图中。 通常,它可以自动在视图和控制器中使用。 但是,更常见的是将其用于视图(后端还有其他辅助功能)。 您在模块中声明的所有帮助程序将在您的所有视图中可用-不仅仅是在同一个命名视图中。

服务

服务是一种干燥控制器的方法。 人们通常创建目录“ / service”并将文件放入其中。 每个文件都是一个类,具有一个初始化程序,输入和该类的特定/相关方法。
为什么要使用它? 如果您想集中精力应用程序的核心逻辑,并且还需要瘦小的模型和控制器,则应该这样做。

服务用例的一个示例:

 类ProductLogisticService
   def initialize(参数)
     //初始化变量
  结束def addInStock
     //在您的库存中添加产品的方法
  结束def removeFromStock
    //从库存中删除产品的方法
  结束
结束 

现在,当您需要调用它时,只需键入:

  ProductLogisticService.new({params})。addInStock 

容易吧? 因此,有很多替代方法可以使用,而只需从模型中转移逻辑即可。 这就是这里的重点!
两个主要的Rails指导原则:
–不要重复自己
–约定优于配置

所以,请记住:别让脂肪。