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

Обсуждаем, как правильно строить приложения
Ответить
nikitakls
Сообщения: 47
Зарегистрирован: 2011.01.25, 08:18

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

Сообщение nikitakls » 2018.06.09, 13:33

Хочу вынести на суд сообщества свой генератор слоистой архитектуры.
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
С удовольствием бы послушала аргументы и советы.

Аватара пользователя
ElisDN
Сообщения: 4984
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN » 2018.06.09, 13:54

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

sda
Сообщения: 331
Зарегистрирован: 2013.12.19, 09:29

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

Сообщение sda » 2018.06.09, 14:58

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

zelenin
Сообщения: 10513
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin » 2018.06.09, 15:01

плохо вижу - в этой слоистой архитектуре слои-то есть?

Аватара пользователя
ElisDN
Сообщения: 4984
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN » 2018.06.09, 16:07

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

Tommi
Сообщения: 59
Зарегистрирован: 2013.08.01, 13:44

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

Сообщение Tommi » 2018.06.12, 14:02

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

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

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

Аватара пользователя
ElisDN
Сообщения: 4984
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN » 2018.06.12, 15:04

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

Ответить