关注【索引目录】服务号,更多精彩内容等你来探索!
这是一个关于 Laravel 模块化设计的基础知识。在研究期间,Laravel 的目标配置必须允许我使用建筑设计的技巧。有关如何配置的信息,请参阅以下信息,然后将其描述为敏捷过程。
在介绍模块化的内容时,您可以了解有关设计和实用程序的信息。 Como isso aqui é um subproduto dos meus estudos, tem muita coisa sobre or Laravel que acabei aprendendo durante o processo. Pode parecer óbvio para você,mas não para o “eu” do passado。
Já adianto:我的目标是在研究期间考虑相关的问题。 Para você, talvez pareçam “informações jogadas”, mas eu geralmente estudo apartir de palavras-chave ou topicos, usando-os como ponto departida para outras pesquisas (Google, YouTube e artigos).其实,这并不是一个假装的未来故事。
免责声明
请使用 IA 组织作为主题和目录的详细说明。在我的研究过程中,我们将提供一些要点,以帮助您组织工作。
目录
- 1. 模块配置
-
1.1. 自动加载(PSR-4) -
1.2. 服务提供商 -
1.3. 睾丸模块
- 2. 模型、工厂和 DTO
-
2.1. Conectando 工厂和模型 -
2.2. 行动 -
2.3.模型状态定义 -
2.4. 数据传输对象(DTO)
- 3. IDE 助手
-
3.1. 安装和使用 -
3.2. Composer 脚本
- 4. 模块化视图
-
4.1. 正常景观 -
4.2. 匿名组件 -
4.3. 等级组件
- 5. 工具和插件
-
5.1. Laravel 理念 -
5.2. 打包 Laravel 模块
- 6. 组织:Abordagens
-
6.1. 垂直切片 -
6.2. Agrupamento por Tipo(按类型分组)
- 7. Padrões de Design e Boas Práticas
-
7.1. Acoplamento Temporal 与 Eventos
- 8. 其他主题
-
8.1. 工厂中的序列
1. 模块配置
1.1. 自动加载(PSR-4)
使用 Laravel 进行模块化,需要先了解新模块的情况composer.json。允许自动加载功能,并确保类可以进行模块化设置。
如果你想了解更多:链接
1.2. 服务提供商
O Service Provideré o coração de um módulo。 Cada 提供者主要提供基础 cada 和ServiceProviderpossui dois métodos 原则:
register():Chamado primeiro,注册商服务和绑定。 boot():查看 register()提供商的待办事项、服务和配置功能(可轮换和查看)。
Para registrar um novo provider, ele deve ser informado no arquivo config/app.php(ou configurado para ser descobertoautomaticamente)。
Laravel 的文档,包含有关主题的信息,推荐!
1.3. 睾丸模块
使用模块化测试时,需要注册或注册模块phpunit.xml。
2. 模型、工厂和 DTO
2.1. Conectando 工厂和模型
-
Por padrão,因为工厂 Procuram Pelas 没有命名空间模型 App\Models。 -
Para conectar uma 工厂是一个 uma 模型,定义了一个没有归属于 $model工厂的模型。 -
关于 Laravel 的详细信息,请参阅 Laravel 工厂的变更情况。使用 newFactory()模型 估计方法:
use Modules\Product\Database\Factories\ProductFactory;
class Product extends Model
{
protected static function newFactory()
{
return ProductFactory::new();
}
}
了解更多:
- Eloquent:入门
- Eloquent:工厂
2.2. 行动
没有 Laravel,您可以使用Actionsagrupar comportamentos 和 ações 面食,类似的想法usecase。service
2.3.模型状态定义
没有银行可以定义 SEM 模型实例的状态。示例:
public const STATUS_PENDING = 'pending';
public static function startForUser(int $userId): self
{
return self::make([
'user_id' => $userId,
'status' => self::STATUS_PENDING,
]);
}
2.4. 数据传输对象(DTO)
Os DTOs são úteis para reduzir o acoplamento e melhorar a clareza。 Eles podem ser usados 段落:
-
不同语言之间的通信。 -
减少参数和方法的数量。 -
代表 coleções de bados(收藏)。 -
使用Eloquent 模型或集合的实例 DTO 的 方法 fromEloquentModel。fromEloquentCollection
class ProductDTO
{
public function __construct(
public readonly int $id,
public readonly string $name,
public readonly string $sku,
public readonly float $price,
) {}
public static function fromEloquentModel(Product $product): self
{
return new self(
id: $product->id,
name: $product->name,
sku: $product->sku,
price: $product->price,
);
}
public static function fromEloquentCollection(Collection $products): Collection
{
return $products->map(fn (Product $product) => self::fromEloquentModel($product));
}
}
了解更多:
- PHP(Laravel)中的 DTO(数据传输对象)
- 如何在 Laravel 中使用 DTO 实现更简洁的代码,最佳实践及实施指南
3. IDE 助手
3.1. 安装和使用
O IDE Helper Generator for Laravel gera PHPDocs 可以将 IDE 作为模型的一部分。
安装:
composer require --dev barryvdh/laravel-ide-helper
Gerando PHPDocs:
-
Para o caminho padrão das 模型:
php artisan ide-helper:models
-
Para um caminho 个性化(例如:na 意大利面 modules):
php artisan ide-helper:models --dir=modules
3.2. Composer 脚本
可以使用脚本号composer.json:
"scripts": {
"ide": "php artisan ide-helper:models --dir=modules"
}
使用 CLI:
composer run ide
4. 模块化视图
Para trabalhar com 查看模块,使用新注册者的resources/views方法。boot()Service Provider
class OrderServiceProvider extends ServiceProvider
{
public function boot(): void
{
$this->loadViewsFrom(__DIR__ . '/../../Ui/Views', 'order');
Blade::anonymousComponentPath(__DIR__ . '/../../Ui/Views/components', 'order');
Blade::componentNamespace('Modules\\Order\\Ui\\ViewComponents', 'order');
}
}
4.1. 观点规范
使用loadViewsFrom()注册商的名称空间视图,进行模块间的冲突。
- 示例:
view('order::checkout')搜索视图 Modules/Order/Ui/Views/checkout.blade.php。
4.2. 匿名组件
使用Blade::anonymousComponentPath()Para registrar uma Pasta de componentes Blade anônimos。
-
PHP 协会的其他类别, apenas arquivos .blade.php。 - 例如:
<x-order::alert />renderi Modules/Order/Ui/Views/components/alert.blade.php。
4.3. 等级组件
使用Blade::componentNamespace()PHP 类组件的名称空间注册器。
-
圣组件 criados com php artisan make:component。 - 示例:
渲染无命名空间 <x-order::checkout-summary />的类组件。CheckoutSummaryModules\Order\Ui\ViewComponents
Laravel 的基本观点:
- 视图
5. 工具和插件
5.1. Laravel 理念
-
PHPStorm 是 Laravel 的支持插件。 -
在模块系统中,允许定义项目的模块化结构(例如:diretório modulescom 命名空间Modules)。 -
可以使用 Laravel 的内部模块继续运行。
我不想在Laravel IDEA上使用 PHPStorm,建议使用它
5.2. 打包 Laravel 模块
- Laravel Modules
是一个流行的模块化项目。 -
Fornece uma estruturaorganizada para criar e gerenciar modulos。 -
O Laravel IDEA possui support nativo para este pacote。
6. 组织:Abordagens
6.1. 垂直切片
-
Organiza o código agrupando por funcionalidade(例如 Order > Checkout:),e não por tipo de arquivo。 -
所有相关事项均与我们的功能有关。 -
方便地进行可视化和操作,以实现统一的功能。
更多关于此主题的信息:
- 探索软件架构:垂直切片
- 垂直切片架构
6.2. Agrupamento por Tipo(按类型分组)
-
Organiza o código por tipo de arquivo(例如:模型、控制器)。 -
可以将模型、事件等模块组合成一个模块化 src的模型,然后继续 Laravel 的操作。
7. Padrões de Design e Boas Práticas
7.1. Acoplamento Temporal 与 Eventos
- 问题: 时间问题
: 时间问题: 一些问题取决于执行过程中的外部因素,可能会导致严格的执行和执行上的困难。 - 解决方案:使用事件
:按照具体方法执行,按责任分开。 O Fluxo prime dispara um evento e outras parts do sistema podem “escutar” e reagir de forma Independente(例如:enviar um e-mail deconfirmação ou atualizar o estoque)。
8. 其他主题
8.1. 工厂中的序列
-
Laravel Sequences允许在工厂实例中更改属性值。 -
É útil para criar bado de teste com pequenas variações.
use Illuminate\Database\Eloquent\Factories\Sequence;
User::factory()
->count(3)
->state(new Sequence(
['name' => 'Alice'],
['name' => 'Bob'],
['name' => 'Carol'],
))
->create();
关注【索引目录】服务号,更多精彩内容等你来探索!

