Правильно ли я использовал интерфейсы?
Проект на Laravel, в котором есть 3 сущности для учета статистики:
class ProfileStat extends Model implements Statistic
class LinkStat extends Model implements Statistic
class ProductStat extends Model implements Statistic
Как видно из примера для них я создал общий пустой интерфейс Statistic
Далее у меня есть 3 класса сервиса для работы со статистикой для каждой сущности
class CreateProfileViewStatistics implements StatisticInterface
class CreateClickLinkStatistics implements StatisticInterface
class CreateProductsViewStatistics implements StatisticInterface
Внутри StatisticInterface у меня лежит 3 метода которые я реализую в классах сервисах
public function createStatistics(User $user, string $guest_ip): void;
public function getStatisticsData(string $guest_ip, User $user): null|Statistic;
public function setStatisticsData(User $user, string $guest_ip, array $data): void;
Суть дела в том, что классы CreateClickLinkStatistics и CreateProductsViewStatistics при реализации методов интерфейса StatisticInterface содержат еще один дополнительный параметр для функций который в методах интерфейса не указан, а именно Request $request
В общем пока сделал Request не обязательным параметром таким образом для CreateProductsViewStatistics
public function createStatistics(User $user, string $guest_ip, Request $request = null): void
public function getStatisticsData(string $guest_ip, User $user, Request $request = null): null|ProductStats
public function setStatisticsData(User $user, string $guest_ip, array $data, Request $request = null): void
И для CreateClickLinkStatistics
public function createStatistics(User $user, string $guest_ip, Request $request = null): void
public function getStatisticsData(string $guest_ip, User $user, Request $request = null): null|LinkStat
public function setStatisticsData(User $user, string $guest_ip, array $data, Request $request = null): void
Слышал что не очень хорошо так делать и методы которые описаны в интерфейсе должны быть в точности реализованы с теми параметрами которые указаны в них, а я получается еще Request подмешал. Может быть стоит разделить на 2 интерфейса? Но тогда они почти одинаковыми получатся с разницей в наличии Request'a.
И вообще есть ли смысл в том, что я тут наворотил? Хочется сделать правильно, но без советов более опытных коллег сложно