MST

星途 面试题库

面试题:Ruby 代码重构中的模块与混合

假设你有多个类,每个类都有一些重复的日志记录方法,例如 `log_message` 方法,用于记录不同的信息。请使用 Ruby 的模块(Module)和混合(Mixin)的概念进行重构,使得代码更加 DRY(Don't Repeat Yourself),并描述模块和混合在这种重构中的作用及优势。
23.2万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
  1. 代码重构
    • 首先创建一个模块,在模块中定义通用的日志记录方法。
    module Logging
      def log_message(message)
        puts "Logging: #{message}"
      end
    end
    
    class ClassA
      include Logging
    end
    
    class ClassB
      include Logging
    end
    
    • 在上述代码中,Logging 模块定义了 log_message 方法。ClassAClassB 通过 include 关键字将 Logging 模块混入自身,从而获得了 log_message 方法。
  2. 模块和混合的作用及优势
    • 作用
      • 模块:模块是一个定义方法、常量和类的容器。在这个场景中,模块 Logging 封装了通用的日志记录逻辑,提供了一个可复用的代码单元。
      • 混合(Mixin):通过 include 关键字将模块混入类中,使得类能够获得模块中定义的方法。这就像类从模块“继承”了这些方法,但与传统继承不同,一个类可以混入多个模块,避免了单继承带来的局限性。
    • 优势
      • DRY 原则:避免了在每个类中重复编写相同的日志记录方法,减少了代码冗余。如果日志记录逻辑需要修改,只需要在模块中修改一处,所有混入该模块的类都会自动应用修改。
      • 代码组织清晰:将通用的功能提取到模块中,使得类的代码更加简洁,专注于自身特有的功能。同时模块也可以被多个类复用,提高了代码的复用性。
      • 灵活性:一个类可以根据需要混入多个模块,实现功能的灵活组合。例如,如果有另外一个 Debugging 模块,类也可以同时混入 LoggingDebugging 模块来扩展功能。