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;

最低0.47元/天 解锁文章

617

被折叠的 条评论
为什么被折叠?



