Пишу приложение и не могу понять как правильно сделать.
Есть классы Page и PageHandler.
class Page {
int x,y,height, width;
...
}
class PageHandler {
vector<Page> pages;
...
}
Собственно PageHandler инкапсулирует набор страниц.
Как правильно реализовать изменение размеров одной страницы, с условием что страницы всегда должны быть размещены вертикально, то есть все страницы соприкасаются границами.
А значит, если уменьшаем высоту страницы на 50 px, то все нижестоящие страницы нужно подвинуть вверх на 50 px.
Вопрос: кто должен отвечать за такой функционал?
Если PageHandler, тогда нужно запретить прямой доступ к Page и делать все операции только через PageHandler?
Или как логичней?
П.С.
Пришел в голову еще вариант. Если нужно — просто меняем размер страницы. А дальше запускаем метод PageHandler::updatePositions() который пробежится по всем страницам и пересчитает x, y координаты.
Только и тут вопрос — в каком методе это делать — PageHandler::setSize(int page,int width,int height) или Page::setSize(int width, int height). Во втором придется хранить ссылку на PageHandler что бы запустить updatePositions().