Ответы пользователя по тегу ООП
  • Какую книгу или видеокурс посмотреть по php oop, pdo, шаблоны проектирования?

    by25
    @by25
    Веб-разработчик
    1. Мэтт Зандстра "PHP: объекты, шаблоны и методики программирования" - Врубиться в ООП
    2. Эрик Фримэн и ко "Паттерны проектирования" (Head First) - Влюбиться в ООП
    3. Эрик Эванс "Предметно-ориентированное проектирование" - научиться проектировать сложные системы
    4. Крэг Ларман "Применение UML 2.0 и шаблонов проектирования" - про проектирование, глубокое понимание ООП
    Ответ написан
    Комментировать
  • Перехват обращение к свойству объекта?

    by25
    @by25
    Веб-разработчик
    Обращаться к свойству через геттер/сеттер.

    class Foo {
        private $param;
    
        public function getParam() {
            //... тут своя логика
            return $this->param;
        }
    }
    Ответ написан
    Комментировать
  • Doctrine ORM Лучшие практики?

    by25
    @by25
    Веб-разработчик
    1. Никаких сеттеров. Entity всегда дожна быть валидной (установка значений через конструкторы, именованные контсрукторы). Если нужно менять состояние - делаем осмысленные методы, типа:
      public function updatePassword($plainPassword, EncoderInterface $encoder) {
          //...
      }
      public function updateProfile(UserProfile $profile) {
          //...
      }

    2. Вадидация должна происходить в приложении на более высоких слоях. (Валидируем request, command и прочее).
    3. Очень удобно использовать Embedded-object (doctrine-orm.readthedocs.io/projects/doctrine-orm/... в качестве Value-objects.
    4. flush() всегда делаем в контроллере (в верхнем слое приложения) и забываем про такую конструкцию $em->flush($myEntity); Суть такая: наше приложение работает с бизнес-объектами (domain-objects), меняет их состояние, однако про сохранение (коммит изменений) слой модели не должен знать, это не его задача. Все изменения фиксируются в конце запроса.
    5. Используйте Domain-events - очень удобная штука.
    6. Иногда очень полезно отказаться от автогенерации доктриной id, можно использовать uuid.


    И дострина многим не нужна, часто достаточно active-records.
    Doctrine даёт большой профит только если доменна логика сложная, ну все это хорошо ложится на проектирование по модели (DDD).
    Ответ написан
    7 комментариев