Есть два класса: ProductPage и OldProductPage. Они выполняют похожие функции - формируют карточку товара.
Но ProductPage - это новая модель карточки товара, а OldProductPage - старая. Как эти классы должны взаимодействовать друг с другом на уровне "архитектуры" и должны ли взаимодействовать?
Тут есть момент. И у первого и у второго класса будет метод get. Но в OldProductPage будет вывод полей QUESTIONS_BLOCK и REVIEWS_BLOCK. Для этих полей нужна дополнительная информация из вне (reviews_size и questions_size), то есть если у метода get для класса ProductPage должно быть два параметра, то у метода get для класса OldProductPage их будет 4.
Если подробнее, то сейчас уже есть класс ProductPage, он содержит в себе метод get для роута получения карточки товара. Так же он содержит в себе методы для других роутов (получение похожих товаров, акссесуаров и т.д.). Мне нужно сделать класс OldProductPage для получения старой модели карточки товара. Я спросил как они должны быть связаны, на что мне ответили не особо долго думая, что OldProductPage должен наследоваться от ProductPage. Я так и сделал, но у меня возник вопрос, может быть есть вариант получше, ведь много методов из ProductPage не используется в OldProductPage (вроде как и не используется, максимум один массив констант). Хотел просто написать абстрактный класс и интерфейс, но меня смущает ситуация с дополнительными аргументами для метода get в OldProductPage.
Можно сделать такой вариант
interface ProductPageInterface {
public function get($reviews_size = null, $questions_size = null);
}
И наследоваться от него, но для чего тогда классу ProductPage вечно пустые $reviews_size и $questions_size? А может они вообще не должны быть взаимосвязаны?
Так же тут момент, что аргументы $reviews_size и $questions_size получают из request(), то есть грубо говоря можно и не передавать эти данные через аргументы, но вроде как так делать не правильно или я не знаю.