SearchModel. Repository

Обсуждаем, как правильно строить приложения
Ответить
Faeron
Сообщения: 9
Зарегистрирован: 2017.10.14, 19:39

SearchModel. Repository

Сообщение Faeron »

Добрый день.

Поделитесь опытом, как реализуете поиск в CRUD приложениях.

Пример,

есть модель Post

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

<?php

class Post extends \yii\base\Model
{
    public $id;
    public $title;
    public $body;
    public $someFiled;
    ...

    public function rules()
    {
        return [
            // валидация
        ];
    }
}
Есть соответственно контроллер, который получает данные.

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

<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\Entity;

class DefaultController extends Controller
{
    public function actionIndex()
    {
    	// полчение данных
    	$posts = ...
        
         return $this->render('post-index', ['posts' => $posts]);
    }
}
Необходимо добавить поиск по различным критериям.

В случае с ActiveRecord более менее все понятно, создается модель PostSearch, расширяющая Post. Вызывается метод search, в которой передаются данные из формы и на основе этих данных формируется DataProvider по необходимым критериям.

В случае использования доктрины и репозиториев, правильно ли я понимаю, что логику из метода search переносим в метод репозитория, например findByCriteria(array $criteria)?

Что если этот поиск по сущности необходим из административного интерфейса (больше критериев) и из пользовательского? Проверять переданные параметры или разнести на несколько методов?

Может кто поделится примерами.
Спасибо
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: SearchModel. Repository

Сообщение samdark »

Да, правильно понимаете. И да, разнести на несколько методов.
noLogicOnlyWar
Сообщения: 83
Зарегистрирован: 2017.07.04, 20:53

Re: SearchModel. Repository

Сообщение noLogicOnlyWar »

Если используете yii то имхо проще статистику и подобные read вещи делать как раз на ар. Смысл в доктрине если у вас полностью анемичная модель и практически нет бизнес логики в условиях круда. К тому же AR из Yii не выкинуть, так почему его не использовать в подходящих случаях?
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: SearchModel. Repository

Сообщение anton_z »

noLogicOnlyWar писал(а): 2017.12.01, 00:09 Если используете yii то имхо проще статистику и подобные read вещи делать как раз на ар. Смысл в доктрине если у вас полностью анемичная модель и практически нет бизнес логики в условиях круда. К тому же AR из Yii не выкинуть, так почему его не использовать в подходящих случаях?
Ну почему не выкинуть, спокойно выкидывается. Использовать вместо Yii AR можно все что угодно. Но я пользуюсь имеено Yii AR, но не так, как в большинстве примеров. Нашел для себя удобный подход, и вы ищите то что вам удобно, пробуйте.
noLogicOnlyWar
Сообщения: 83
Зарегистрирован: 2017.07.04, 20:53

Re: SearchModel. Repository

Сообщение noLogicOnlyWar »

anton_z писал(а): 2017.12.01, 02:54 Ну почему не выкинуть, спокойно выкидывается. Использовать вместо Yii AR можно все что угодно. Но я пользуюсь имеено Yii AR, но не так, как в большинстве примеров. Нашел для себя удобный подход, и вы ищите то что вам удобно, пробуйте.
Ну я хотел сказать что AR часть фреймворка, все равно ведь будет лежать гдето под рукой.
А вообще для меня немного наболевшая тема. Недавно был кейс - переписывал модуль (скорее выделял его из монолита). Взял доктрину + гексогональную архитектуру для модуля. Все вроде бы неплохо пока не пришлось переделывать index page со списком сущностей. Загвоздка была в том что в списке выводится еще и статистика по сущностям которая лежит в clickhouse а сами сущности были в mysql. Плюс там были крос-сортировки и подобное. В итоге чем дружить это все с доктриной, забил, и оставил в инфраструктурном слое ar + кастомные dataProvider для этого дела. Вроде бы не по феншую, а вроде и моя совесть может быть чиста, раз вся эта статистика не трогает домен?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: SearchModel. Repository

Сообщение ElisDN »

noLogicOnlyWar писал(а): 2017.12.01, 11:03 Вроде бы не по феншую, а вроде и моя совесть может быть чиста, раз вся эта статистика не трогает домен?
Это нормально делать ReadModel для всевозможных листингов.
Ответить