Предисловие
Ранее я видел вопрос типа “Необходимо ли разделять уровень обслуживания в рамках Yii2?” Из ответов других людей я также собрал ответы, но я думаю, что все еще существует потребность в живом просе, чтобы иметь более четкое и мощное убеждение. Если вас интересует мой реальный боевой опыт, вы также можете нажать на рекомендацию и коллекцию. Прежде чем поднимать просо, позвольте мне сначала поговорить о сервисе. Каков эффект? Чтобы кто-нибудь еще не запутался. 1. Что такое сервис? В системах, ориентированных на OO, служба является менеджером бизнеса, а в системах, ориентированных на процессы, – ее сценарием. 2. Какую роль играет сервис? Роль уровня обслуживания заключается в инкапсуляции этой сложной бизнес-логики, для участия в которой требуется несколько моделей. Эти модели больше не полагаются непосредственно друг на друга, а взаимодействуют для завершения логики на уровне обслуживания. Первая цель уровня обслуживания на самом деле состоит в том, чтобы отделить слой модели.
анализ требований
1. Установите уровень обслуживания в структуре Yii2 для работы с общей и сложной бизнес-логикой.
Эскизный проект
1. Установите уровень обслуживания в разделе общие.
2. Некоторая общая логика обработки данных (основная обработка данных написана здесь).
анализ кода
1. Напишите ответвление службы ключей. PHP-файл в общей службе. Класс обслуживания филиала Clues наследует Chance, основной класс модели этого модуля. Все, что касается публичной бизнес-логики Chance, записано в этом файле.
namespace common\service; use Yii; use api\modules\v1\models\Sales; use api\modules\v1\chance\models\Chance; /** *// Common Data Processing Logic for Subordinate Cables */ class CluesBranchService extends Chance { // A list of clues for subordinates public static function getIndex() { $SalesModel = new Sales(); $uids = $SalesModel->sevenChild(Yii::$app->user->id); if(count($uids)){ $query = Chance::find()->where(['in','owner_id',$uids]); }else{ $query = Chance::find()->where(['owner_id'=>'-1']); } return $query; } }
2. Вызовите контролеров.
use common\service\CluesBranchService; $query = CluesBranchService::getIndex();
Примечание: Здесь возвращено значение $query, а не результаты запроса. Все, кто пользовался Yii2, знают, что список разбит на страницы с помощью ActiveDataProvider, и нет необходимости выяснять результаты. Чтобы унифицировать, мы возвращаем $query непосредственно здесь. Если есть особая необходимость добавить, где и где, или для получения результатов данных, $query – > где ([‘условие’]); $query – > все ().
Анализ и резюме
Выше приведена простая реализация уровня обслуживания с бизнес-логикой. Некоторые люди могут задаться вопросом, следует ли разделять уровень обслуживания или нет. В общем резюме, если вам нужно использовать несколько моделей для бизнес-логики, поместите ее на уровень обслуживания. Если это просто собственный бизнес модели, он не имеет ничего общего с другими моделями, просто поместите его в модель. Если ваша система невелика, ваша бизнес-логика очень проста, и нет необходимости в долгосрочных эволюционных итерациях, вы можете написать ее так, как вам нравится.
Сопутствующая информация
Необходимо ли разделять уровень обслуживания в рамках Yii2? Https://segmentfault.com/q/1010000003849810