Опыт разработки: c 2015 года.

Ключевые навыки: PHP, Yii2, Symfony, PostgreSQL, CSS3, SASS, JS, Docker, Bootstrap, MySQL, HTML5, Git, Github, Gitlub, Bitbucket, Doctrine, Apache, Nginx.
Паттерны архитектуры: ООП, DDD, CQRS.
Контакты
Местоположение
Россия

Достижения

Все достижения (10)

Наибольший вклад в теги

Все теги (113)

Лучшие ответы пользователя

Все ответы (288)
  • Смысл модулей в Yii2?

    maksim92
    @maksim92 Куратор тега Yii
    Нашел решение — пометь вопрос ответом!
    Как написано в документации:
    Модули - это законченные программные блоки, состоящие из моделей, представлений, контроллеров и других вспомогательных компонентов. При установке модулей в приложение, конечный пользователь получает доступ к их контроллерам. По этой причине модули часто рассматриваются как миниатюрные приложения. В отличии от приложений, модули нельзя развертывать отдельно. Модули должны находиться внутри приложений.


    Исходя из определения Модули (микросервисы) существуют для изоляции разных частей сайта друг от друга. Благодаря слабой связанности и сопряженности Модуля, можно менять одну часть сайта на другую без поломок других. При этом нужно учитывать, что база данных таких модулей тоже должна быть независима, а общаются такие модули между друг другом через API или события приложения, когда модули на одном сервере.

    При поломке одного модуля — не ломается все приложение. На эту тему можно прочитать статью Как проектировать табуретку?. Когда-то отвечал на подобную тему на Toster.

    Архитектуру Модулей в приложении вы можете придумать сами. Главное, чтобы доменный слой был независимым. Под модули можете сделать отдельную корневую папку с названием модуля:
    - Backend
    - Frontend
    - Shop
    - Blog

    Или же сгруппировать:
    - Backend
    - Frontend
    - Modules
    - Modules/Shop
    - Modules/Blog

    Контроллеры и вид при этом будут просто разделены по папкам модулей:
    - Backend/Controller/Shop
    - Backend/Controller/Blog
    - Frontend/Controller/Shop
    - Frontend/Controller/Blog
    
    Например,
    так или так. Разделение в Models делите все по папкам модулей:
    Model/Shop
    Model/Blog

    Подведя итог:
    1. Модуль служит для изоляции отдельных частей приложения на разные детали. При поломке двигателя не сломается шасси. Шасси можно поменять на шасси от другого авто, при этом двигателю всё равно на каком шасси автомобиль.
    2. Модуль можно переиспользовать в других проектах или выложить в отдельный репозиторий и подключать в composer.
    3. Хорошо структурированный, читаемый и понятный код. Сопровождаемость.
    4. Тестируемость
    5. Горизонтальное масштабирование.
    и др.

    Разделение модулей происходит по папкам следуя стандартам PSR7.

    Полезные статьи на схожую тему:
    1. https://toster.ru/q/659155
    2. Мой вопрос на форуме
    3. Организация независимых модулей на Yii2
    Ответ написан
  • Архитектура приложения. Как сделать независимые модули (сервисы)?

    maksim92
    @maksim92 Куратор тега Yii
    Нашел решение — пометь вопрос ответом!
    По этому вопросу очень долго искал ответа))
    Вам уже скинули статью по независимым модулям, но этого мало. Что вам нужно:

    1. Независимый слой MODEL.
    В этой папке находятся Use Case (Service), Сама сущность Entity (AR), Желательно иметь репозитории для изоляции от базы данных ну и другой доменный слой логики, который не зависит ни от чего. Ни от фреймворка, ни от других модулей и пакетов. Ваша задача написать код в этой части так, чтобы его можно было скопировать в любую папку, настроить зависимости и чтобы этот код заработал хоть на чистом PHP. Если не планируете менять фреймворк, то можно зависить от фреймворка.

    2. Зависимости
    Все зависимости модуля реализовать либо через Interface либо через события, но события лучше. А дальше уже синхронизируйте через приложение или отдельный модуль. Можно и по api.

    3. UI (пользовательский интерфейс)
    Он может быть зависимым от других модулей. В него входят: контроллеры, view, формы, vue.js и так далее. В общем то, с чем взаимодействует пользователь.

    Тем самым получается такая система если опираться на MVC:
    VC - могут быть зависимы от других модулей
    M - не может быть зависима ни от чего, кроме PHP. Желательно и отделять слой базы данных с помощью Repository. Тогда ваш пакет будет очень сильно независим даже от базы. И вам вообще будет без разницы куда вы это храните в user или employee.

    Если будет такой слой, то можно спокойно переносить хоть на будущий Yii3. Однако На Yii1 и Yii2 такое сделать сложно. Надо изворачиваться и займет это больше времени. Так как сам Фреймворк вставляет нам палки и приходится делать костыли из-за его монолитности. К такому подходу не привыкли Yii1 и Yii2 разработчики. Обычно на Yii такое понимание «фигак, фигак и в продакшн».

    Такую архитектуру удобно будет строить на Symfony ну и будущем Yii3.

    Вот материал которые мне помогли:
    1. Мастер-класс Интернет-магазин на Yii2
    2. Создание архитектуры программы или как проектирова...
    3. https://www.yiiframework.ru/forum/viewtopic.php?f=...
    4. https://habr.com/ru/post/329286/
    Ответ написан
  • Трудно ли будет перенести сайт с yii2 на yii3?

    maksim92
    @maksim92 Куратор тега Yii
    Нашел решение — пометь вопрос ответом!
    Yii 3 есть в демо версии, однако там много чего не сделано, код постоянно изменяется со структурой. Разрабатывать на нём точно не стоит. В конце концов демо версия может сильно отличаться от релиза. Ждать релиза yii3 не стоит. Точной даты нет. Известен лишь год - 2019.

    Если выберите фреймворк yii2, то реализуйте проект обдуманно. Перенести проект на yii3 будет не сложно, используя паттерны проектирования и отделя бизнес логику от остальной части, за которую отвечает Фреймворк. Подробно написано здесь: Архитектура приложения. Как сделать независимые модули (сервисы)?

    Вы так же можете увидеть прогресс в репозиториях GitHub. Что нового в UPGRADE, и посмотреть структуру пакетов. Да, именно пакетов, а не модулей. Сам больше не будет монолитом он будет собираться по запчастям.

    Изменений в проектировании много, но команда постарается сохранить некоторые привычные вещи. Например, если раньше использовали Yii::t(), то в yii3 нужно будет использовать $this->app->t()
    Заменить через IDE по проекту не сложно! Однако есть и координальные решения связанные с Active Record. С большей вероятностью этот паттерн исчезнет в версии 3.0. Это обсуждается тут. Поэтому стоит обратить внимание на использование сторонних пакетов. В своём проекте вы сможете что-то изменить под Yii3, а вот сторонние расширения могут вообще никогда не переписаться по трети версию.

    Информацию про yii3 можно отслеживать тут. Так же создан новый раздел русскоязычного ФОРУМА. Попробуйте познакомиться с Yii3 Demo
    Ответ написан
  • Какие названия классов лучше всего использовать в html разметке?

    maksim92
    @maksim92
    Нашел решение — пометь вопрос ответом!
    Это называется методология. https://m.habr.com/ru/post/256109/ Самая популярная БЭМ
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (121)