• Закон Деметры. Нужен ли?

    ConConovalofff
    @ConConovalofff
    Сегодня прочитал об этом законе и сделал для себя следующие выводы:

    Закон не нацелен на улучшение читаемости или эстетичности кода. Наоборот, красота кода теряется, а структура класса обрастает проксирующими функциями-пустышками, портя читаемость класса.

    Основная цель использования закона, это избавить команду программистов от страха изменять существующий код.

    К примеру, представим 2 разные ситуации:
    1. В проекте игнорируется закон Деметры. Класс b включен в классы a, c и d. Каждый класс инстанцируется в разных участках кода по 10 раз каждый и применяется a.b.Method(), c.b.Method() и d.b.Method()
    2. В проекте применяется закон Деметры. Класс b включен в классы a, c и d. Каждый класс инстанцируется в разных участках кода по 10 раз каждый и применяется a.Method(), c.Method() и d.Method()

    При замене класса 'b' на класс 'z':
    В 1-ом случае нам придется изменить код в 30 местах где используется a.b.Method().
    Во 2-ом случае нам потребуется изменить код в 3-ех методах классов a, c и d.

    Следуя этому правилу, я думаю будет логичен следующий код:
    $user = new User('Paul')
    $comments = $user->getCommentsOfLastPost()


    В классе User:
    function getCommentsOfLastPost()
    {
        $posts = new Posts()
        $posts->getCommentsOfLastPostUser($this)
    }

    и т.д.

    В итоге, этот закон стоит применять там, где стоимость легкого изменения кода выше стоимости чистоты структуры классов. А значит, закон лучше игнорировать при разработке небольших проектов.

    Я уловил суть?
    Ответ написан
    1 комментарий
  • Yii2 Как сохранять ActiveRecord через хранимую процедуру Table API?

    qonand
    @qonand
    Software Engineer
    Наличие логики в СУБД само по себе не правильно. Поэтому если можете избежать этого - избегайте. Если же все таки такой ситуации избежать не получается (всякие случаи бывают ... ) тогда у Вас есть два варианта решения:
    1. Если у Вас AR не содержит особой логики и запросов к БД тогда реализуйте отдельный класс-репозиторий который будет заниматься работой с БД, в том числе и сохранением
    2. Если AR содержит какую-то логику или запросы - тогда только костылить и переопределять сохранение на уровне AR
    Ответ написан
    2 комментария
  • Верный инструмент для обработки больших бинарный файлов на сервере приложения?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Можете переварить С программы в расширения php.
    Ответ написан
    1 комментарий
  • Как вы освоили шаблоны проектирования?

    27cm
    @27cm
    TODO: Написать статус
    Вот вам 12 маленьких задач на 12 паттернов:
    github.com/zfcampus/zendcon-design-patterns

    1. Открываете папку с паттерном.
    2. Читаете README.md с описание задачи.
    3. Открываете exercise.php и пытаетесь решить задачу, применив соответствующий паттерн.
    4. При необходимости вспоминаете теорию: github.com/domnikl/DesignPatternsPHP
    5. Сверяетесь с решением в solution.php.
    Ответ написан
    7 комментариев
  • Как управлять android-смарфоном с неработающим тач-экраном?

    @Lexans
    здесь есть опыт работы с android смартфоном с разбитым экраном
    habrahabr.ru/post/220869
    Ответ написан
    Комментировать