Разделение обязанностей в классе без чрезмерного разоблачения - PullRequest
1 голос
/ 06 февраля 2020

Мне трудно найти хорошие способы разделить обязанности класса, не раскрывая слишком много оригинального класса.

Как пример простой У меня есть класс 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 ++ были бы хороши вместо теоретизирования).

...