Laravel Modular [anotações]
目录
1. 模块配置
2. 模型、工厂和 DTO
药膏,tudo bem com você?
这是一个关于 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. 自动装弹(PSR-4)
- 1.2 服务提供商
- 1.3. 模块化测试
-
- 2.1. Conectando 工厂和模型
- 2.2. 行动
- 2.3.模型状态定义
- 2.4. 数据传输对象(DTO)
-
- 3.1. 安装和使用
- 3.2. Composer 脚本
-
- 4.1. 普通的视野
- 4.2. 字母组件
- 4.3. 类组件
-
- 5.1. Laravel IDEA
- 5.2. 包 Laravel 模块
-
- 6.1. 垂直切片
- 6.2. Agrupamento por Tipo(按类型分组)
-
7. Padrões de Design e Boas Práticas
- 7.1. Acoplamento Temporal 与 Eventos
-
- 8.1. 工厂序列
1. 模块配置
1.1. 自动装弹(PSR-4)
使用 Laravel 进行模块化,需要先了解新模块的情况composer.json。允许自动加载功能,并确保类可以进行模块化设置。
Se quiser saber mais: Link
1.2 服务提供商
O Service Provideré o coração de um módulo。 Cada 提供者主要提供基础 cadaServiceProvider和 possui 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)。
1.3. 模块化测试
使用模块化测试时,需要注册或注册模块phpunit.xml。
2. 模型、工厂和 DTO
2.1. Conectando 工厂和模型
- Por padrão,因为工厂 Procuram Pelas 没有命名空间模型
App\Models。 $modelPara conectar uma 工厂是一个 uma 模型,定义了一个没有归属于工厂的模型。- 关于 Laravel 的详细信息,请参阅 Laravel 工厂的变更情况。使用
newFactory()模型估计方法:
use Modules\Product\Database\Factories\ProductFactory;
class Product extends Model
{
protected static function newFactory()
{
return ProductFactory::new();
}
}
Saiba mais em:
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(收藏)。
- 使用实例 DTO 的方法(
fromEloquentModel或fromEloquentCollection)作为 Eloquent 模型或集合的一部分。
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));
}
}
Saiba mais em:
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"
}
Uso na 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()注册商的名称空间视图,进行模块间的冲突。
- Exemplo:
view('order::checkout')buscará a view emModules/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 />渲染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 IDEA
- 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。 - 所有相关事项均与我们的功能有关。
- 方便地进行可视化和操作,以实现统一的功能。
Mais sobre esse topico em:
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();
参考:Laravel:序列
文章来源:https://dev.to/clintonrocha98/laravel-modular-anotacoes-56ai