roistat/php-code-conventions

Очень похоже на фабрику

andrew-svirin opened this issue · 3 comments

Вместо

$date = $this->_dateService->instance();
$date = $this->_dateFactory->create();

Тут речь про какое-то правило конкретное?
Если речь просто про случайный пример кода, то там все нейминги условные и нет смысла на них обращать внимание (если это не основная суть правила).

Здесь речь про правило: Запрещено создавать объект даты при помощи new \DateTime()
А в примере написано, что хорошо:

В проекте для этого должен быть фабричный метод в сервисе для работы с датами.

Плохо:

$date = new \DateTime();

Хорошо:

$date = $this->_dateService->instance();

И можно было согласиться, учитывая Exception который ожидает в конструкторе класса \DateTime, но пример гласит В текущем классе->_у нас есть приватный сервис (кстати так приватные сервисы уже не рекомендуют подчеркивать, после того, как появилось слово private)->и вызовем метод текущий екземпляр (можно было бы действие какое-то вызвать)

Про какое правило — понял.

Тут в примере акцент не на том, что класс называется dateService (может у кого-то называться и dateFacroty). И не о том, что приватные свойства надо начинать на подчеркивание. Речь о том, что в проекте должен быть централизованный метод, который инстанцирует DateTime. Нельзя юзать конструктор напрямую (лишаем себя возможности легко покрывать тестами код).

Пример можно исправить на какой-то более общий, предлагайте в PR. Можно написать и $date = $dateFactory->create();, нам не принципиально. =)