Мне трудно найти хорошие способы разделить обязанности класса, не раскрывая слишком много оригинального класса.
Как пример простой У меня есть класс Product
, который предоставляет все операции, которые может выполнять продукт, но также может рисовать себя на GUI:
/* Only relevant pieces shown. */
class Product
{
public:
void
Draw(QPainter& painter);
private:
QPointF mPosition;
Rotation mRotation;
QColor mFillColor;
QColor mOutlineColor;
};
Я чувствую, что это нарушает SRP. Способ рисования Product
может измениться, и это не имеет никакого отношения к управлению Product
. Или, может быть, позже, может появиться потребность в нескольких способах рисования Product
, и никто не захочет продолжать модифицировать сам класс Product
для этого.
Но, разумеется, как только кто-то хочет переместить код рисования в другое место, эти частные переменные должны быть доступны, что также не подходит мне. Я бы добавил кучу геттеров (которые чертовски уродливы сами по себе), и я бы связывал себя с сохранением этого нового «интерфейса» навсегда. Это также вступает в противоречие с принципом «говори, не спрашивай».
Конечно, должны быть лучшие методы для подобных проблем? (примеры с кодом C ++ были бы хороши вместо теоретизирования).