← Back to list

actions-pattern
by JoseApRJunior
Easy-Budget migrado para Laravel
⭐ 0🍴 0📅 Jan 20, 2026
SKILL.md
name: actions-pattern description: Garante que novas Actions sigam o padrão de classes actions reutilizáveis do Easy Budget.
Padrão de Actions do Easy Budget
Esta skill define o padrão arquitetural para criação de Actions no sistema Easy Budget. Actions são classes focadas em uma única responsabilidade de negócio, reutilizáveis e composáveis.
Estrutura Padrão
<?php
declare(strict_types=1);
namespace App\Actions\ModuleName;
use App\Support\ServiceResult;
use Exception;
class ActionName
{
public function __construct(
private DependencyA $dependencyA,
private DependencyB $dependencyB
) {}
/**
* Descrição do que a action executa.
*/
public function execute(ParamType $param): ServiceResult
{
try {
// 1. Validações de pré-condição
if (!$this->isValid($param)) {
return ServiceResult::error('Mensagem de erro específica.');
}
// 2. Operações de banco em transação (se necessário)
return DB::transaction(function () use ($param) {
// Lógica de negócio
$result = $this->performAction($param);
// Registro de histórico (se aplicável)
$this->logAction($param, $result);
return ServiceResult::success($result, 'Mensagem de sucesso.');
});
} catch (Exception $e) {
return ServiceResult::error($e->getMessage());
}
}
private function isValid(ParamType $param): bool
{
// Lógica de validação
return true;
}
private function performAction(ParamType $param): mixed
{
// Implementação da ação
return $result;
}
private function logAction(ParamType $param, mixed $result): void
{
// Registro de histórico se o modelo suportar
if (method_exists($param, 'actionHistory')) {
$param->actionHistory()->create([
'tenant_id' => tenant('id'),
'action' => 'action_name',
'description' => 'Descrição da ação realizada.',
'user_id' => auth()->id(),
]);
}
}
}
Regras de Composição
- Dependências via Constructor Injection: Sempre injete dependências no construtor
- Método
executeúnico: Cada Action deve ter um único ponto de entrada - ServiceResult obrigatório: Sempre retorne
ServiceResultpara operações que podem falhar - Transação de banco: Use
DB::transaction()para operações que modificam dados - Tratamento de exceções: Use try-catch e retorne erros via
ServiceResult::error() - Registro de histórico: Use
actionHistory()quando disponível
Exemplo de Composição de Actions
class ComplexBusinessAction
{
public function __construct(
private ActionA $actionA,
private ActionB $actionB,
private ActionC $actionC
) {}
public function execute(Context $context): ServiceResult
{
// Compõe múltiplas actions em um fluxo de negócio
$resultA = $this->actionA->execute($context);
if ($resultA->isError()) {
return $resultA;
}
return $this->actionB->execute($context);
}
}
Quando Criar uma Nova Action
- Quando a lógica de negócio é reutilizável em múltiplos controllers
- Quando o fluxo envolve múltiplas operações transacionais
- Quando há necessidade de composição com outras actions
- Quando a lógica é complexa o suficiente para justificar separação
Quando NÃO Criar uma Action
- Operações simples de CRUD que podem ir direto no Service
- Lógica que só é usada em um único lugar
- Operações que são apenas wrapper de repository
Score
Total Score
50/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
Reviews
💬
Reviews coming soon