<rmcreative>

RSS

Модули Yii

15 июня 2016

Модули Yii существуют для решения двух задач:

  1. Группировка похожих функций приложения.
  2. Изоляция функций для их последующего использования в других проектах.

Когда команда Yii думала над модулями, задача рассматривалась целиком: то есть и группировка и изоляция. Но как только сообщество начало использовать модули, оказалось, что используются они, в основном, для группировки.

Оно и понятно: нормальную изоляцию сделать тяжело. Модуль не должен в этом случае использовать что-либо извне напрямую. Если что-либо необходимо, модуль предоставляет интерфейс, который реализуется в приложении, использующем модуль. То же применимо и к обратной ситуации: извне использовать что-либо из модуля напрямую строго запрещено: только через интерфейс.

Комментарии RSS

  1. №10524
    Игорь
    Игорь 15 июня 2016 г., 16:39:30

    Мы их используем для версионности api, это уместно?

  2. №10525
    Sam
    Sam 15 июня 2016 г., 16:56:13

    Игорь, это как раз группировка. Вполне уместно.

  3. №10526
    Дмитрий
    Дмитрий 15 июня 2016 г., 20:13:58

    Мы используем модули, что сгруппировать похожий функционал, но сделать некоторый код общий. Пример: есть сайт api.site.ru и lk.site.ru, у сайтов практически общие модели, но абсолютно разный вывод и функционал.

    api и lk мы оформили как модули к одному общему проекту. Так нормально делать?

  4. №10527
    Sam
    Sam 15 июня 2016 г., 20:54:40

    Ну да. Это нормально, хотя это и не изолированные модули.

  5. №10528
    Serge Bezborodov
    Serge Bezborodov 16 июня 2016 г., 9:45:19

    Тоже используем модули для группировки, весь функционал сайта разбит на 11 модулей, есть связанность между собой. Проект один, мультисайтовый, поэтому и использовать в других проектах и не планировали.

  6. №10529
    Дмитрий
    Дмитрий 16 июня 2016 г., 11:51:12

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

    Объем записей в таблицах от 500к, почти каждый запрос это 2-3 Joina. Раньше делал через геттеры AR, выборка за раз порядка 100 записей. Но заметил такую штуку, что если использовать createCommand, то память заметно меньше расходуется и скорость быстрее. К сожалению, сейчас не могу показать реальный тесты, так как тестировали это месяц назад, но в итоге, большую часть моделей мы переписали на DAO, отказавшись от AR.

    Так, так ли плох AR или его использование подходит для небольших проектов? У нас также постоянно идет вставка, порядка 5000 записей в час. Пока для этого используем AR.

    Когда использование AR уместно, а когда нет?

  7. №10530
    Вася
    Вася 16 июня 2016 г., 12:29:26

    А можно простенький пример или хотябы ссылочку на то как делать эти самые интерфейсы взаимодействия модулей. Как я понимаю речь тут идет про DI контейнер... хочется пример

  8. №10531
    Андрей
    Андрей 16 июня 2016 г., 13:37:42

    Небезынтересный цикл статей про модули

  9. №10532
    HaruAtari
    HaruAtari 16 июня 2016 г., 18:31:55

    Небезынтересный цикл статей про модули

    Доклад будет про этот же подход, только немного дополненный. Может можно будет потом запись найти.

  10. №10533
    Андрей
    Андрей 16 июня 2016 г., 18:36:59

    Доклад будет про этот же подход, только немного дополненный

    Спасибо за статьи, запись доклада обязательно посмотрю.

  11. №10537
    Sam
    Sam 20 июня 2016 г., 12:20:41

    Дмитрий, про AR напишу отдельный пост.

  12. №10538
    Дмитрий
    Дмитрий 20 июня 2016 г., 13:34:46

    Александр, спасибо. Буду ждать!

  13. №10539
    LAV45
    LAV45 21 июня 2016 г., 1:04:13

    Дмитрий, используйте AR + ->asArray() yiiframework.domain-na.me/doc/guide/2.0/ru/tutorial-performance-tuning#using-arrays

  14. №10615
    Юрий
    Юрий 08 авг. 2016 г., 16:33:21

    Sam, все-таки хочется посмотреть примеры интерфейсов, предоставляемых модулем

  15. №10616
    Sam
    Sam 09 авг. 2016 г., 13:31:52

    Юрий, всё зависит от модуля. Я делал такое для 1.1. Идея ровно та же.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.