Страница 1 из 1

Crud генератор слоистой архитектуры

Добавлено: 2018.06.09, 13:33
nikitakls
Хочу вынести на суд сообщества свой генератор слоистой архитектуры.
https://github.com/nikitakls/gii-crud-services

Устанавливается через composer:

Код: Выделить всё

composer require --dev nikitakls/yii2-gii-scrud "*"
Далее нужно подключить генератор в конфиге:

Код: Выделить всё

    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
        'generators' => [
            'scrud' => [
                'class' => 'nikitakls\gii\scrud\Generator',
            ]
        ],
    ];

Думаю кому-то пригодится этот инструмент.
На выходе получается такая структура:
  • /forms/ModelForm.php
  • /repository/ModelRepository.php

    Код: Выделить всё

    class ModelRepository{
        public function get($pk)
        protected function getByPk($id, $canCache = true, $pk = 'id')
        protected function getBy($condition)
        public function remove(Model $model)
        public function clearCache()
        public function save(Model $model, $runValidation = true, $attributeNames = null)
    }
    
  • /services/ModelService.php

    Код: Выделить всё

    class ModelService{
        public function __construct(ModelRepository $Models)
        public function create(ModelForm $form)
        public function edit(int $id, ModelForm $form)
        public function remove(int $id)
    }
    
  • /controllers/ModelController.php
  • /models/ModelSearch.php
  • views
С удовольствием бы послушала аргументы и советы.

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.06.09, 13:54
ElisDN
1. Почему репозиторий кидает HttpException?
2. Почему класс поиска наследуется от сущности?
3. Когда вызывается clearCache()? Почему из IdentityMap сущность не очищается в remove()? Почему getBy не работает с IdentityMap?
4. Зачем здесь $runValidation и $attributeNames? С домеными сущностями валидация в них не нужна.
5. Как организуется сохранение всего агрегата? Без этого метод save() при работе со связями не имеет смысла.

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.06.09, 14:58
sda
ElisDN, где здесь вообще слоистая архитектура. Тут всё что генерируется зависит от фреймворка, который есть слой представления. Нижний слой, о верхнем знать не должен. Здесь всё наоборот.

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.06.09, 15:01
zelenin
плохо вижу - в этой слоистой архитектуре слои-то есть?

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.06.09, 16:07
ElisDN
sda писал(а): 2018.06.09, 14:58 ElisDN, где здесь вообще слоистая архитектура.
Не ко мне вопрос, а к ТС.

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.06.12, 14:02
Tommi
В этих слоистых вещах, когда они соприкасаются с практическими задачами, вот еще такой момент мне не ясен:
В модели поиска (по сути это UI уровень) напрямую идет работа с базой, вся вот эта сборка query объекта:

Код: Выделить всё

$query = SomeModel::find()->where(...);
...
$query->andFilterWhere
Разве этим мы жестко не завязываемся на определенную структуру БД, не распыляем знание о БД по многим местам, где потом везде придется искать и менять?

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.06.12, 15:04
ElisDN
Tommi писал(а): 2018.06.12, 14:02 В модели поиска (по сути это UI уровень) напрямую идет работа с базой
Это специфика упрощённой смешанной работы в Yii. В канонических слоистых вещах поиски выносятся в ReadRepository или Query/Handler.

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.06.29, 13:47
Tommi
nikitakls писал(а): 2018.06.09, 13:33 Хочу вынести на суд сообщества свой генератор слоистой архитектуры.
Так уж он и ваш. Автора зовут Никита, и это как то не сходится:
nikitakls писал(а): 2018.06.09, 13:33 С удовольствием бы послушала аргументы и советы.
Или это опечатка, почему тогда слились?
Расширение вроде в правильном направлении двигалось, похоже на архитектуры как у Дмитрия.
Сделать интерфейсы а не конкретные классы для репозитариев и сервисов, HttpException убрать из репозитория, всякое остальное - обсуждаемо, что больше надо, канонически или удобно по yii-шному оставить.

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.07.05, 13:50
zelenin
Tommi писал(а): 2018.06.29, 13:47
nikitakls писал(а): 2018.06.09, 13:33 Хочу вынести на суд сообщества свой генератор слоистой архитектуры.
Так уж он и ваш. Автора зовут Никита, и это как то не сходится:
nikitakls писал(а): 2018.06.09, 13:33 С удовольствием бы послушала аргументы и советы.
Или это опечатка, почему тогда слились?
ну офигенно остроумный.
Tommi писал(а): 2018.06.29, 13:47Расширение вроде в правильном направлении двигалось, похоже на архитектуры как у Дмитрия.
именно что похоже. Это как выдавать корягу, похожую на лопату, за лопату - вроде похоже, а задачу лопаты выполнить не может. Карго-культ.

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.07.06, 10:02
Tommi
zelenin писал(а): 2018.07.05, 13:50 Это как выдавать корягу, похожую на лопату, за лопату - вроде похоже, а задачу лопаты выполнить не может. Карго-культ.
Коряги, лопаты... Ну ты прям Петросян.

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.07.06, 12:14
zelenin
Tommi писал(а): 2018.07.06, 10:02
zelenin писал(а): 2018.07.05, 13:50 Это как выдавать корягу, похожую на лопату, за лопату - вроде похоже, а задачу лопаты выполнить не может. Карго-культ.
Коряги, лопаты... Ну ты прям Петросян.
больше существа, мальчик

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.07.06, 13:10
Tommi
zelenin писал(а): 2018.07.06, 12:14 больше существа, мальчик
Не унывай ты так, мальчик, совсем тебя, задрота, в реале смотрю забили, потому и бегаешь самоутверждаешься на форумы. Ну а куда же еще, с таким то унылым выражением как у тебя в профиле. :lol:

Re: Crud генератор слоистой архитектуры

Добавлено: 2018.07.06, 13:19
zelenin
о боже, мы стали свидетелем батла по фактам