Open alexey-malov opened 7 years ago
Если какие-то еще сущности зависят от CCanvas, рассмотреть вариант с зависимостью от интерфейса.
[ ] IGetShape::GetShape(const Vec2f mousePosition) = 0; тоже можно не делать виртуальным, а в виде свободной функции.
[x] IGetShape переименовать в IShapeProvider
[x] В IGetShape лучше перенести получение количества фигур из IAddAndDeleteShape.
[ ] GetAmountShapes переименовать в GetShapeCount
Можно также убрать зависимость от класса CCanvas Ввести интерфейс ICanvas:
class ICanvas
{
public:
virtual ~ICanvas() = default;
virtual IShapeCollection& GetShapeCollection() = 0;
virtual Size GetSize()const = 0;
};
class CCanvas : public ICanvas, public IShapeCollection
{
public:
IShapeCollection& GetShapeCollection()override
{
return *this;
}
};
};
[ ] Из ICanvas убрать GetShapeProvider, оставив GetShapeCollection()
[ ] Заменить зависимость класса CChangeShapeRectCanvasCommand от IShapeProvider, заменив ее на зависимость от CShapeModelPtr (или от CShapeModel&). IShapeProvider больше не используется. Можно его выкинуть
Вместо этого команды должны требовать некоторый интерфейс или интерфейсы, который бы реализовывался классом CCanvas или его компонентами. Команды должны принимать вместо ссылки на CCanvas ссылку на интерфейс. Это облегчит тестирование классов команд и их повторное использование.