Bob Nadler, Jr. Logo

Iceberg Classes and Inheritance

Iceberg
Image by Drew Avery

Better developers than I have written about iceberg classes and why they are a code smell. I’d like to talk about a specific kind of iceberg class I’ve recently come across. This type involves inheritance. Here’s an example of what I mean.

class Job
  def perform
    # do some setup
    execute
    # do some cleanup
  end

  private

  def execute
    raise NotImplementedError
  end
end

class SomeJob
  private

  def execute
    # do some stuff
  end
end

class AnotherJob
  private

  def execute
    # do other stuff
  end
end

My gut reaction to this code is that there is a design smell here. I’m wondering if my reaction is not because of the “iceberg” nature of the subclasses, but because of the use of inheritance. I’m curious what others think and if you agree that there is a problem with the code.



Email list
Image by husin.sani

No spam, ever. Unsubscribe at any time.