Правильно ли я использовал интерфейсы?

Проект на 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.

И вообще есть ли смысл в том, что я тут наворотил? Хочется сделать правильно, но без советов более опытных коллег сложно


Ответы (0 шт):