From architecture-dotnet
Gera Commands e Queries na camada Application seguindo CQRS e Clean Architecture. Use quando o usuário mencionar "criar command", "novo command", "criar query", "nova query", "feature application", "caso de uso", "use case", "handler", "criar handler", "command handler", "query handler", "adicionar command", "adicionar query", "operação de escrita", "operação de leitura", "CQRS". Também dispara quando pedir para criar funcionalidades que envolvam orquestração de casos de uso, busca de dados ou alteração de estado. NÃO use para lógica de domínio pura (use domain-layer) ou endpoints HTTP (use dotnet-endpoint-generator).
How this skill is triggered — by the user, by Claude, or both
Slash command
/architecture-dotnet:architecture-featureThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Gera Commands (escrita) e Queries (leitura) na camada Application seguindo CQRS, MediatR e Clean Architecture.
Gera Commands (escrita) e Queries (leitura) na camada Application seguindo CQRS, MediatR e Clean Architecture.
references/command-template.md para estrutura de Commandsreferences/query-template.md para estrutura de Queriesreferences/behaviors.md para pipeline behaviors| Tipo | Quando Usar | Retorno |
|---|---|---|
| Command | Altera estado (Create, Update, Delete) | Result<T> ou Result |
| Query | Apenas leitura (Get, List, Search) | Result<TDto> ou Result<PagedResult<TDto>> |
Para Command:
Para Query:
Application/
└── {Feature}/
└── Commands/
└── {Action}{Entity}/
├── {Action}{Entity}Command.cs
├── {Action}{Entity}CommandHandler.cs
└── {Action}{Entity}CommandValidator.cs
Application/
└── {Feature}/
└── Queries/
└── Get{Entity}{Suffix}/
├── Get{Entity}{Suffix}Query.cs
└── Get{Entity}{Suffix}QueryHandler.cs
└── DTOs/
└── {Entity}Dto.cs
record imutávelIRequest<Result<T>> (não IRequest<T>)CancellationToken propagado em todos os métodos asyncResult.Invalid() ou Result.NotFound()record com todos os campos necessários| Artefato | Padrão | Exemplo |
|---|---|---|
| Command | {Action}{Entity}Command | CreateProductCommand |
| Command Handler | {Action}{Entity}CommandHandler | CreateProductCommandHandler |
| Command Validator | {Action}{Entity}CommandValidator | CreateProductCommandValidator |
| Query | Get{Entity}{Suffix}Query | GetProductByIdQuery, GetProductListQuery |
| Query Handler | Get{Entity}{Suffix}QueryHandler | GetProductByIdQueryHandler |
| DTO | {Entity}Dto | ProductDto |
// CORRETO - Usar Result<T>
public record CreateProductCommand(...) : IRequest<Result<Guid>>;
// INCORRETO - Não usar tipo direto
public record CreateProductCommand(...) : IRequest<Guid>;
// CORRETO - Injetar interfaces
public class Handler(IProductRepository repository, IUnitOfWork unitOfWork)
// INCORRETO - Não injetar implementações
public class Handler(ProductRepository repository, ApplicationDbContext context)
Usuário quer criar feature
│
▼
Altera estado?
┌────┴────┐
Sim Não
│ │
▼ ▼
COMMAND QUERY
│ │
▼ ▼
Precisa Retorna
validação? lista?
│ │
Sim Sim
│ │
▼ ▼
Validator Paginação
Causa: Assembly não registrado ou handler não público
Solução: Verificar AddMediatR(cfg => cfg.RegisterServicesFromAssembly(...))
Causa: ValidationBehavior não registrado
Solução: Adicionar services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>))
Causa: Interface não registrada no DI
Solução: Verificar registro em Infrastructure/DependencyInjection.cs
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub brunocesharp/claude --plugin architecture-dotnet