У вас есть много теорий вокруг этого вопроса.
Я предпочитаю композицию, потому что она делает поведение намного более пригодным для повторного использования, но если вы посмотрите на Rails, вам придется создавать подкласс ActiveRecord :: Base class каждый раз, когда вы хотите использовать объект в вашей базе данных. Если вы посмотрите на DataMapper, то все наоборот, поскольку вам просто нужно включить DataMapper :: Resource.
Наследование против композиции (с помощью модулей) - большая тема, и вопрос, который вам придется задать себе, сводится к следующему: как я могу добиться большей разобщенности между компонентами, которые я предоставляю, и существующей кодовой базой другого пользователя?