2015-09-01 3 views
3

Я изучаю рамки Yii2 уже пару недель. Одна из его основных концепций - «Живые модели, тонкие контроллеры». Читая исходный код advanced application template, я обнаружил, что из-за этой концепции почти вся логика содержится в моделях.Сервисный уровень и сущности в Yii 2

Ну, вообще не было вопросов, если бы у меня не было опыта с Spring MVC, где уровень сервиса кажется естественным способом отделить логику приложения от его фактических данных.

Итак, вопрос заключается в следующем: может быть хорошей практикой реализовать такую ​​корпоративную структуру в приложении, построенном с Yii2? Говоря более конкретно: стоит ли использовать модели Yii для Entities, DTO и сервисов?

Спасибо заранее!

PS: Вопрос может казаться слишком абстрактным или субъективным, но с небольшим опытом работы с Yii2. Я хотел бы знать, есть ли какие-либо архитектурные особенности в Yii2, которые могли бы сделать вышеупомянутую реализацию не оптимальной в отношении для обслуживания кода, производительности и т. д.?

ответ

0

Использование другой функции вместо встроенной функции не может быть хорошей практикой для всех фреймворков.

ИМО, модель часть является убийцей особенность yii2, так что если вам не нужно эшафот (генерация кода), вы можете использовать любую другую структуру РНР без части модели (zf2, symfony2, микро-фреймворков).

Таким образом, вы можете использовать свою собственную архитектуру модели без какого-либо отставания в производительности, но вам нужно будет написать больше кода, чтобы сделать все, и ваши модели будут трудно поддерживать другими людьми, которые используют yii2, и поэтому я рекомендую использовать другой каркас, который поставляется без модельного слоя.

+0

Благодарим вас за ответ. –

0

Фактически вы можете создавать модели, которые не являются ActiveRecords, поэтому они фактически становятся вашим уровнем обслуживания, просто нужно растягиваться от yii\base\Model или yii\base\Object, как вы сочтете нужным, и реализовать всю необходимую вам логику. Вы также можете создать эти модели в другой папке, называемой сервисами, поэтому их пространство имен станет app\services\ModelName

+0

Благодарим за отзыв. Ваш ответ напоминает то, что я размышлял. Что вы могли бы сказать о следующем: создайте некоторые DTO, простирающиеся от 'yii \ base \ Model' с целью переноса и проверки данных от клиента (из форм), создания некоторых объектов, простирающихся от' yii \ db \ ActiveRecord' с целью сохранения проверенные данные и создать некоторые Сервисы, простирающиеся от 'yii \ base \ Component', чтобы реализовать всю бизнес-логику, чтобы объекты и DTO были связаны только с их конкретными целями? –

+0

Я думаю, что это был бы действительно хороший способ разделить и организовать всю логику приложения. Даже базовый шаблон приложения по умолчанию делает что-то подобное, используя как LoginForm, так и User для процесса входа в систему, отделяя проверку имени пользователя и пароля для входа в пользовательскую модель. Самое лучшее в Yii2 заключается в том, что он не ограничивает того, что вы можете сделать, это больше похоже на набор готовых к использованию инструментов, но вы все равно можете создать свой собственный инструмент, используя их в качестве базы. – marche

+0

В некоторых моих собственных проектах я делаю различие между моделями данных, моделями поиска и формами (при необходимости), таким образом, я не получаю модель с 1000 + линиями (хотя иногда я все еще делаю) – marche