使 Rails delegated_type 更清晰 - Kasper Timm Hansen

主要观点:

  • 讨论了 Rails 的 delegated_type,指出其名称不佳及强制结构的问题。
  • 阐述了 delegated_type 的多表继承灵感及通过委托实现的方式,通过代码示例展示了 EntryMessageComment 的关系。
  • 指出 delegated_type 结构在域建模方面存在的问题,如内类型离不开外类型、-able 命名不佳、涉及单独目录的关注点等。
  • 提出了改进方案,如使用 Entry::MessageEntry::Comment 明确域建模、去掉不必要的 ActiveSupport::Concern 样板代码、自动修剪生成的方法名的命名空间等。
  • 考虑对 delegated_type 进行重命名以更清晰地表达其含义,还提供了重命名后的实现代码。
  • 提到了在命名空间支持方面的 bonus,即定义 render_in 方法以自动渲染相关部分视图。

关键信息和重要细节:

  • delegated_type 本质上是多表继承通过委托实现,外类型 Entry 包含内类型 MessageComment
  • 存在的问题包括内类型需通过外类型访问、命名后缀 -able 不好、涉及单独目录的关注点等。
  • 改进方案包括更改命名方式、去掉 ActiveSupport::Concern、自动修剪命名空间等。
  • 重命名 delegated_typecomposed_with_delegate 并给出了实现代码。
  • render_in 方法可自动根据委托类型渲染相关部分视图。
阅读 10
0 条评论