Загвоздка в проектировании структуры модуля
-
- Сообщения: 132
- Зарегистрирован: 2015.09.30, 20:12
Загвоздка в проектировании структуры модуля
Здравствуйте! Имеется yii2 advancend
Планирую текущие работы переделывать на модули, т.к. уже проблематично искать нужный кусочек кода. Возник вопрос, как лучше всего объединить в модули мои работы.
На данный момент на frontend и backend имеются свои контроллеры и представления. Модели общие для всего проекта.
Если отбросить представления, то контроллеры у меня местами дублируют функционал.
Для примера:
Имеется возможность создавать/редактировать/удалять новости. Данная возможность есть, как во фронтеде, так и в бэкэнде за одним лишь исключением, что для фронтенд и бэкэнд идут свои права доступа к этим экшенам, но функционал один и тот же.
Как грамотнее всего объединить все мои работы в модули?
Планирую текущие работы переделывать на модули, т.к. уже проблематично искать нужный кусочек кода. Возник вопрос, как лучше всего объединить в модули мои работы.
На данный момент на frontend и backend имеются свои контроллеры и представления. Модели общие для всего проекта.
Если отбросить представления, то контроллеры у меня местами дублируют функционал.
Для примера:
Имеется возможность создавать/редактировать/удалять новости. Данная возможность есть, как во фронтеде, так и в бэкэнде за одним лишь исключением, что для фронтенд и бэкэнд идут свои права доступа к этим экшенам, но функционал один и тот же.
Как грамотнее всего объединить все мои работы в модули?
-
- Сообщения: 610
- Зарегистрирован: 2015.07.16, 10:50
Re: Загвоздка в проектировании структуры модуля
Создать общий и унаследоваться?
-
- Сообщения: 132
- Зарегистрирован: 2015.09.30, 20:12
Re: Загвоздка в проектировании структуры модуля
Можно привести пример унаследования для разных модулей? Вопрос может быть и глупый, но я сейчас понимаю под наследованием указанием полного пути до контроллера модуляandrei.obuhovski писал(а):Создать общий и унаследоваться?
-
- Сообщения: 610
- Зарегистрирован: 2015.07.16, 10:50
Re: Загвоздка в проектировании структуры модуля
NewsController extends common\modules\news\controllers\NewsController
Re: Загвоздка в проектировании структуры модуля
забудь о том, что тебе посоветовали. Делай общий модуль, который является бэкендом же, а фронт вообще к модулю не относится. Теперь поясню: модуль должен реюзабельным, переносимым в другой проект. Бэкенд будет везде одинаковый, а фронт проектозависим, поэтому в модуль его включать глупо.
И ни в коем случае не плодить дочерние модули.
И ни в коем случае не плодить дочерние модули.
Re: Загвоздка в проектировании структуры модуля
Реюзабельность и переносимость дорого обходится (особенно в поддержке) и не всем нужна.zelenin писал(а):... модуль должен реюзабельным, переносимым в другой проект.
Re: Загвоздка в проектировании структуры модуля
размазывание логики по трем директориям дорого обходится. Реюзабельность - сайд эффект от более логически обоснованной компоновки модуля.rugabarbo писал(а):Реюзабельность и переносимость дорого обходится (особенно в поддержке) и не всем нужна.zelenin писал(а):... модуль должен реюзабельным, переносимым в другой проект.
Re: Загвоздка в проектировании структуры модуля
Модуль не должен быть ни реюзабельным, ни переносимым.zelenin писал(а):размазывание логики по трем директориям дорого обходится. Реюзабельность - сайд эффект от более логически обоснованной компоновки модуля.rugabarbo писал(а):Реюзабельность и переносимость дорого обходится (особенно в поддержке) и не всем нужна.zelenin писал(а):... модуль должен реюзабельным, переносимым в другой проект.
Может быть.
Но не должен быть.
Re: Загвоздка в проектировании структуры модуля
самодостаточная единица приложения может быть самодостаточной, но не обязана!
Re: Загвоздка в проектировании структуры модуля
подставь вместо модуль экстеншн. Может быть. Но не должен. Понимаешь аналогию? viewtopic.php?p=178383#p178383 хочешь делать просто - делай. хочешь делать качественно - приложи усилие.rugabarbo писал(а):Модуль не должен быть ни реюзабельным, ни переносимым.zelenin писал(а):размазывание логики по трем директориям дорого обходится. Реюзабельность - сайд эффект от более логически обоснованной компоновки модуля.rugabarbo писал(а):
Реюзабельность и переносимость дорого обходится (особенно в поддержке) и не всем нужна.
Может быть.
Но не должен быть.
Можно размазать логику, но зачем? Можно собрать всю логику в одном месте - удобнее. А главное делает модуль автоматом переносимым (но еще не совсем реюзабельным, поскольку в условиях yii это можно сделать только на простом уровне http://www.yiiframework.ru/forum/viewto ... 19&t=23349 )
Re: Загвоздка в проектировании структуры модуля
Я использую модули, но не выделяю их в расширения и не выкладываю в OS, потому что по времени не потяну их качественную поддержку. Считаю, что в этом случае их лучше вовсе не выкладывать.
В результате большая часть моих модулей не обладает переносимостью. А те, которые используются лишь в одном проекте, не обладают и реюзабельностью. Нет таких задач для этих модулей.
В результате большая часть моих модулей не обладает переносимостью. А те, которые используются лишь в одном проекте, не обладают и реюзабельностью. Нет таких задач для этих модулей.
Re: Загвоздка в проектировании структуры модуля
ты не слышишь. не надо размазывать логику по проекту и любой модуль, не завязанный на другие модули, станет переносимым. Любой модуль, размазанный по проекту, автоматом становится не переносимым. Просто нет никакого объективного смысла размазывать.rugabarbo писал(а):Я использую модули, но не выделяю их в расширения и не выкладываю в OS, потому что по времени не потяну их качественную поддержку. Считаю, что в этом случае их лучше вовсе не выкладывать.
В результате большая часть моих модулей не обладает переносимостью. А те, которые используются лишь в одном проекте, не обладают и реюзабельностью. Нет таких задач для этих модулей.
Пример: абстрактный модуль пользователей.
Re: Загвоздка в проектировании структуры модуля
В том-то и дело, что мои модули конкретные, а не абстрактные. Продумывать их абстрактными времени нет, потому что переносимость не нужна. Цена абстракции - это доп.время на "продумать".
Re: Загвоздка в проектировании структуры модуля
ок, перефразирую:rugabarbo писал(а):В том-то и дело, что мои модули конкретные, а не абстрактные. Продумывать их абстрактными времени нет, потому что переносимость не нужна. Цена абстракции - это доп.время на "продумать".
Пример: любой чей-то модуль пользователей (не какой-то конкретный).
-
- Сообщения: 132
- Зарегистрирован: 2015.09.30, 20:12
Re: Загвоздка в проектировании структуры модуля
Вот теперь запутался еще больше)zelenin писал(а):забудь о том, что тебе посоветовали. Делай общий модуль, который является бэкендом же, а фронт вообще к модулю не относится. Теперь поясню: модуль должен реюзабельным, переносимым в другой проект. Бэкенд будет везде одинаковый, а фронт проектозависим, поэтому в модуль его включать глупо.
И ни в коем случае не плодить дочерние модули.
Хотя я больше придерживаюсь позиции zelenin насчет размещения логики работы в одном месте, но тогда по факту получается тот же basic.
И тогда возникает проблема с "балансом",т.е. у фронтеда всего 1 экшн для вывода информации, а у бэкэнд 4(Index,add,edit,delete). Это лишь пример, но можно уловить суть,также интересует разделение шаблона на фронтенд и бэкэнд для одного и того же экшена. Если мне распишут небольшой пример с такой организацией, то с радостью выберу "все в 1 месте", пока что вижу только такое "основное в 1 месте, а незначительное по разным приложениям"
Re: Загвоздка в проектировании структуры модуля
модуль это не готовый фронтенд и бекенд, это скорее конструктор, набор экшенов работающих с его логикой, моделей работающих с его хранилищем и сервисов (последним желательны интерфейсы), но в модульности с юзаньем ар, вы скоро столкнетесь, что ваш доменный слой изолирован от внешнего мира, внести в него правки - целая проблема, поэтому в модуле хранят базовые связи внутри модели, и дают расширить свою реализацию для common\models с добавленными связями на другие [modules/]models. Бекенд реализация делается в модуле, но как правило она больше демо возможностей + виджетов + какието базовые переводы, юзать backend из vendor'a та еще веселуха, некоторые извращаются расширя контроллер вендора, добавляя тем, "глушат" ненужные экшены - все тлен, по опыту могу сказать, что контроллеры везде как правило свои backend\components\Controller. Должно хватать просто экшенов специфичных, даже виджеты малореюзабельны изза разновидности цсс фреймворков, стилей и даже либ жс
апд: + миграции само собой + консольные комманды, консоль -единственное что можно делать с контроллерами =)
апд: + миграции само собой + консольные комманды, консоль -единственное что можно делать с контроллерами =)
Re: Загвоздка в проектировании структуры модуля
Basic и advanced никак не относятся к модулям. В модуле у вас контроллеры только для бэка, т.к. он одинаковый в разных проектах. Фронт же каждый раз разный и поэтому в модуль не включается, а реализуется в рамках фронта в каждом проекте.Prosto_Tok писал(а):Вот теперь запутался еще больше)zelenin писал(а):забудь о том, что тебе посоветовали. Делай общий модуль, который является бэкендом же, а фронт вообще к модулю не относится. Теперь поясню: модуль должен реюзабельным, переносимым в другой проект. Бэкенд будет везде одинаковый, а фронт проектозависим, поэтому в модуль его включать глупо.
И ни в коем случае не плодить дочерние модули.
Хотя я больше придерживаюсь позиции zelenin насчет размещения логики работы в одном месте, но тогда по факту получается тот же basic.
И тогда возникает проблема с "балансом",т.е. у фронтеда всего 1 экшн для вывода информации, а у бэкэнд 4(Index,add,edit,delete). Это лишь пример, но можно уловить суть,также интересует разделение шаблона на фронтенд и бэкэнд для одного и того же экшена. Если мне распишут небольшой пример с такой организацией, то с радостью выберу "все в 1 месте", пока что вижу только такое "основное в 1 месте, а незначительное по разным приложениям"
-
- Сообщения: 610
- Зарегистрирован: 2015.07.16, 10:50
Re: Загвоздка в проектировании структуры модуля
1) Чем пострадает переносимость, если вместо 2 папок будет 3? Или речь о модуле как расширении?zelenin писал(а): Можно размазать логику, но зачем? Можно собрать всю логику в одном месте - удобнее. А главное делает модуль автоматом переносимым (но еще не совсем реюзабельным, поскольку в условиях yii это можно сделать только на простом уровне http://www.yiiframework.ru/forum/viewto ... 19&t=23349 )
2) Причем тут логика, если вопрос о контроллерах?
3) Чем плохо включать фронтенд в модуль(расширение)? Хорошо ведь когда демка есть, особенно если модуль большой (модуль форума, например). Причем, переопределяется же не сложно.
Re: Загвоздка в проектировании структуры модуля
если вместо 1 папки будет 3. Если вместо одного "вырезать/вставить" делаешь три, то это уже непереносимо.andrei.obuhovski писал(а):1) Чем пострадает переносимость, если вместо 2 папок будет 3? Или речь о модуле как расширении?
вопрос об организации кодаandrei.obuhovski писал(а):2) Причем тут логика, если вопрос о контроллерах?
оно там не нужно.andrei.obuhovski писал(а):3) Чем плохо включать фронтенд в модуль(расширение)?.
согласен. В папку example запихните, опишите в документации подробно. Зачем в сам модуль пихать то, что не будет юзаться?andrei.obuhovski писал(а):Хорошо ведь когда демка есть, особенно если модуль большой (модуль форума, например).
-
- Сообщения: 610
- Зарегистрирован: 2015.07.16, 10:50
Re: Загвоздка в проектировании структуры модуля
zelenin писал(а):В папку example запихните, опишите в документации подробно.
Как эту папку подключить в приложение без модуля?
Вполне может юзаться. Пример, этот форум.zelenin писал(а):Зачем в сам модуль пихать то, что не будет юзаться?