Где лучше размещать функции загрузки данных
Где лучше размещать функции загрузки данных
Добрый день. Мне не дает покоя один вопрос, где с точки зрения логики оптимальнее размещать функции загрузки и обработки моделей? Есть два очевидных варианта, и оба с недостатками:
1. В контроллере, использовать метод вроде "findModel()", где прописать условие загрузки модели и ее обработки. Однако у этого метода недостаток заключается в невозможности вызова из другого контроллера.
2. Прописать метод поиска в классе модели, например "static findById()" Однако в этом случае, будет страдать логика сущности Модели и класс будет разрастаться, если я после получения данных из БД буду их тут же обрабатывать.
1. В контроллере, использовать метод вроде "findModel()", где прописать условие загрузки модели и ее обработки. Однако у этого метода недостаток заключается в невозможности вызова из другого контроллера.
2. Прописать метод поиска в классе модели, например "static findById()" Однако в этом случае, будет страдать логика сущности Модели и класс будет разрастаться, если я после получения данных из БД буду их тут же обрабатывать.
Re: Где лучше размещать функции загрузки данных
viewtopic.php?f=19&t=34472&hilit=Service+Layer
Там много срача, но и полезного достаточно.
Там много срача, но и полезного достаточно.
Re: Где лучше размещать функции загрузки данных
сервисы/репозитории
Re: Где лучше размещать функции загрузки данных
Можно ссылки на примеры?zelenin писал(а):сервисы/репозитории
Re: Где лучше размещать функции загрузки данных
Почитал https://github.com/yiisoft/yii2/blob/ma ... locator.md
Как-то странно получится, часть моделей будет загружаться напрямую, часть из сервисов.
Как-то странно получится, часть моделей будет загружаться напрямую, часть из сервисов.
Re: Где лучше размещать функции загрузки данных
по ссылке другой концепт.Dimec писал(а):Почитал https://github.com/yiisoft/yii2/blob/ma ... locator.md
Как-то странно получится, часть моделей будет загружаться напрямую, часть из сервисов.
Код: Выделить всё
PostService {
function getById($id) {
}
...
}
Re: Где лучше размещать функции загрузки данных
Понятно, спасибо. По сути это просто отдельный класс получается.
Re: Где лучше размещать функции загрузки данных
для каждой отдельной ответственности делаем отдельный класс.Dimec писал(а):Понятно, спасибо. По сути это просто отдельный класс получается.
Re: Где лучше размещать функции загрузки данных
@zelenin, у вас в публичном доступе нет проекта на yii1/2? Хотелось бы посмотреть. На GH не нашел.
Re: Где лучше размещать функции загрузки данных
не писал на yii уже почти год. самые доходчивые и близкие к yii примеры хорошей архитектуры в статьях про laravel. гуглите по ключевым словам.DeaTh писал(а):@zelenin, у вас в публичном доступе нет проекта на yii1/2? Хотелось бы посмотреть. На GH не нашел.
Re: Где лучше размещать функции загрузки данных
Тогда еще вопрос, где размещать загрузку зависимых сущностей?
или
В примере выше-то все понятно, но если getComments() будет массивным и не относящимся к PostService?
Есть какие-нибудь стандарты / best practice по этому поводу?
Можно, конечно getComments() сделать алиасом к методу CommentService и прописать в нем (new CommentService())->findByPostId($postId); ...
Код: Выделить всё
/* A: */
$post = (new PostService())->findPost($postId);
$comments = $post->getComments();
Код: Выделить всё
/* B: */
$comments = (new CommentService())->findCommentsByPostId($postId);
Есть какие-нибудь стандарты / best practice по этому поводу?
Можно, конечно getComments() сделать алиасом к методу CommentService и прописать в нем (new CommentService())->findByPostId($postId); ...
Re: Где лучше размещать функции загрузки данных
мне нравится.Dimec писал(а):Можно, конечно getComments() сделать алиасом к методу CommentService и прописать в нем (new CommentService())->findByPostId($postId); ...
помним, что в yii уже есть связи и из контекста модели post можно вызвать $post->getComments();