Короче научившись всякими законами Деметры и начитавшись банды четырех, я столкнулся со следующей проблемой.
Есть класс Pivot. Этот класс умеет перемещяться в пространстве, так же перемещаться может еще и класс Model. Следовательно они наследуют следующий интерфейс:
class Movable{
virtual setPosition(const vec3 &value) = 0;
// еще куча сеттеров и геттеров
virtual ~Movable() {}
}
Что бы не дублировать код и не плодить кучи атрибутов у класса я сделал класс Transform
class Transform{
void setPosition(const vec3 &value);
// куча геттеров и сеттеров
}
Сразу уже видно, что херня какая-то. Ладно идем дальше. Наследуем Pivot от Movable суем в него Transform и реализум методы setPosition у Pivot, в реализации будет трансляция чтото типа m_transform.setPosition(value); Такая же херня и у Model. Я не могу сделать AbstractMovable в котором я бы сделал все эту херню 1 раз, и Pivot с Model уже наследовал бы от него, но все правила не поощряют наследовать таким образом. Я хочу максимально следовать этим правилам. Вот как быть? Плодятся кучу методов, которые транслируются тупо в другой класс. Например Model наследует интерфейс Drawable, следовательно содержит параметр класс DrawRule, зависимости ростут, классы начинают уметь больно много вещей, вобщем нарушаются все эти законы. Как не нарушать?
Есть у кого что сказать по этому поводу? Я запутался нахрен!