Ruby on Rails 开发最佳实践与设计模式

1、Active Record 和 Data Mapper 模式的主要区别是什么?

  • Data Mapper 将模型与持久化分离,模型只是增强的数据容器,使用其他对象(如存储库和关系)进行数据查询和存储,实现了领域层和领域服务的清晰分离;
  • Active Record 中对象知道如何自我持久化。

2、我们何时应该使用模型验证,何时应该使用数据库约束?

模型验证与数据库约束的适用场景

  • 模型验证
  • 用于处理潜在的状态违规
  • 以优雅的方式应对并给予用户反馈
  • 适用于需要与用户交互的场景

  • 数据库约束

  • 用于确保数据的一致性
  • 当程序中的错误只会触发约束失败时,依靠数据库约束抛出异常更合适

3、什么是鸭子类型,以及 Rails 是如何使用它的?

鸭子类型简介

鸭子类型是一种编写代码的技术,基于对象能响应给定方法而不检查对象类型的假设。它可被视为隐式接口,在使用 Ruby 类型签名时,鸭子类型通常对应接口类型。

在 Rails 中,以 link_to 辅助方法为例,只要对象满足 Active Model 接口,任何 Ruby 对象都可作为记录使用,就像 Book 类对象能被 link_to 使用。

4、在哪些情况下,纯 Ruby 对象(如 Struct 实例)比增强了 Active Model 功能的类更可取?

当在单次工作单元执行期间初始化大量对象时,纯 Ruby 对象(如 Struct 实例)更可取。因为增强 Active Model 功能会带来性能代价,会影响 CPU 时间和内存使用。

5、什么是代码变更率(churn),它与代码复杂度有什么关系?

代码变更率描述了给定文件被修改的频率,可通过计算文件受影响的提交总数得出。通常使用变更率和复杂度的乘积作为累积指标,简单来说,变更率排名前10和复杂度排名前10的文件的交集,是确定最值得重构的 Ruby 类的起始集合。

6、使用 Flog 编写一个 Unix 单行命令来显示前 N 个最复杂的 Ruby 文件。能否将其与代码变更率计算器结合,以显示按变更率 * 复杂度排序的前 N 个文件?

显示前 N 个最复杂的 Ruby 文件的 Unix 单行命令:

find app/models -name "*.rb" | while read file; do echo $file `flog -s $file | head -n 1 | awk '{print $2}'`; done | sort -k 2 -nr | head -n N

要将其与变更率计算器结合显示按变更率 * 复杂度排序的前 N 个文件,可先分别获取每个文件的变更率和复杂度,再计算乘积并排序取前 N 个,示例命令如下:

find app/models -name "*.rb" | while read file; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值