О повторном использовании кода модели

Добрый день, коллеги! Помогите найти грамотное решение.

Имею контроллер Articles и две модели-таблицы - pages/versions, где одной странице соответствует множество версий.

Требуется сделать контроллер News, также с поддержкой версионности. Логика контроллера News будет своя, а вот логика моделей и сами таблицы (две отдельные таблицы в БД) будут иметь очень много общего.

Какое решение в этой ситуации будет наиболее оптимальным с точки зрения прозрачности кода?

  1. Полное дублирование кода контроллера и моделей с последующей независимой разработкой (2 контр.+4 модели+4 таблицы)

  2. Использование общих моделей, но разных «поведений» (2 контр.+2 модели+4 таблицы)

  3. Модели разные, но у них есть общие предки, содержащие универсальные функции (2 контр.+6 моделей+4 таблицы)