Рубрики
Uncategorized

Архитектура API на уровне модулей

Автор оригинала: David Wong.

От сообщества разработчиков PHP/Laravel https://laravel -China.org/top…

Мне очень нравится писать программное обеспечение и методы программирования, основанные на модульном проектировании, но мне не нравится полагаться на сторонние программные пакеты и библиотеки классов для решения тривиальных задач, потому что они не очень хорошо улучшат ваш уровень программирования. Итак, в течение двух лет я писал программное обеспечение на основе модулей в Laravel, и теперь я очень доволен результатами.

Решающим фактором, побуждающим меня к программированию и программированию на основе модульного проектирования, является то, что я хочу продолжать повышать свой уровень программирования. Представьте, что вы создали структуру проекта, и через шесть месяцев вы обнаружили, что в проекте было много ошибок. Не затрагивая существующий код в течение шести месяцев, архитектуру проекта обычно нелегко изменить. Анализируя этот проект, я заметил два основных момента: у вас либо есть стандарт на протяжении всего проекта, либо вы придерживаетесь его, либо вы можете модульно его модульно улучшить.

Некоторые люди склонны придерживаться стандартов любой ценой, даже если это может означать соблюдение стандартов, которые вам больше не нравятся. Лично я предпочитаю постоянное совершенствование. Не имеет значения, если 20-й модуль и 1-й модуль написаны совершенно по-разному. Если однажды мне понадобится вернуться к модулю 1 для исправления ОШИБКИ или рефакторинга, я могу улучшить его до последнего стандарта, используемого Модулем 20.

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

1-Поставщик Услуг Маршрутизации

Систему маршрутизации Laravel можно рассматривать как вход в целое приложение. Первое, что нужно изменить, – это параметр RouteServiceProvider по умолчанию. php Файл, который должен модулировать существующую маршрутизацию.

mapModulesRoutes();
    }
    protected function mapModulesRoutes()
    {
        // If you are writing traditional Web applications instead of HTTP APIs, use the `web'middleware. 
        Route::middleware('api')
             ->group(base_path('routes/modules.php'));
    }
}

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

2-Модульный файл

Laravel находится в маршруты В папке есть несколько файлов. Потому что нас здесь больше нет. RouteServiceProvider Эти маршруты сопоставлены, поэтому их можно удалить напрямую. Далее, давайте создадим modules.php Файлы маршрутизации.

Модуль из 3 книг

В приложении В папке создайте Modules/Books/routes.php Документация. В этом файле мы можем определить правила маршрутизации для этого модуля Книги приложений.

Вы можете использовать маршрутизацию на основе контроллера, которая является стандартом по умолчанию в Laravel, но лично я предпочитаю контроллеры Goodbye, обработчики запросов Hello. Ниже приведены Список книг Реализация.

paginate());
    }
}

В приведенном выше коде Книжный ресурс Уровень преобразования ресурсов Laravel. Согласно официальной рекомендации для пространств имен, мы можем приложение/Модули/Книги/Ресурсы Создать его в папке.

 $this->resource->id,
            'title' => $this->resource->title,
        ];
    }
}

4-Авторский модуль

Мы также можем запустить модуль “Авторы” через файл “Маршруты”.

Примечание: приложение/Модули/Авторы Это пространство имен представляет файл, который мы пишем, и очень просто для обработчика запросов.

paginate());
    }
}

Наконец, мы превратили класс ресурсов, который мы написали, в адаптивный формат JSON.

 $this->resource->id,
            'name' => $this->resource->name,
            'books' => $this->whenLoaded('books', function () {
                return BookResource::collection($this->resource->books);
            })
        ];
    }
}

Обратите внимание, как ресурс поступает в другой модуль для повторного использования Книжный ресурс . Обычно это не лучший выбор, потому что модули должны быть полностью самодостаточными и могут повторно использовать только стандартные классы, такие как Красноречивые модели Или общие компоненты, предназначенные для использования в любом модуле. Решение этой проблемы обычно заключается в Книжном ресурсе Копировании в Авторам В модуле, изменения могут быть внесены без использования другого модуля, и наоборот. Я решил сохранить это межмодульное использование. Этот пример демонстрирует хороший эмпирический подход к изоляции модулей друг от друга, но если вы считаете, что приведенный выше пример прост и вряд ли вызовет какие-либо проблемы. Всегда убедитесь, что вы пишете тесты, охватывающие функциональность, которую вы пишете, чтобы избежать того, чтобы другие люди неосознанно изменили ваше приложение.

5-Заключение

Хотя это очень простой пример, я надеюсь, что он позволит людям легко работать со структурными стандартами, используя платформу Laravel, в соответствии со своими собственными потребностями. Вы можете легко изменить расположение файлов для создания модульных приложений. Большинство моих проектов идут вместе с ними. Приложение/Компоненты Модули, которые могут быть применены к любому модулю многоразового использования общего типа базовых классов; Приложение/Красноречивый , Модули Папки могут использоваться для сохранения красноречивой модели и реляционной модели базы данных, где мы можем создавать любые функциональные возможности на основе модулей. Это структура каталогов папок приложения, которое я недавно начал изучать:

Я надеюсь, что каждый сможет извлечь из этого эту концепцию, каждый модуль имеет свои собственные требования и может иметь свою собственную папку/сущность/класс/метод/атрибут. Нет необходимости стандартизировать все модули одинаково, потому что некоторые модули намного проще других и не требуют большого структурного проектирования. В этом примере показано, что Отток учетных записей Модули предоставляют API-интерфейсы через папки HTTP, в то же время предоставляя команды ремесленника через консоль. С другой стороны, Обзор учетной записи Предоставляются только HTTP-API, и они зависят от хранилищ, объектов ценности( сумки ) и классов обслуживания( разделители страниц ) Для обеспечения большей ценности данных.