Полезный паттерн для Minimal APIs в .NET, если вы хотите организовать проект по принципу Vertical Slice Architecture.

Идея очень простая.

Вместо того чтобы держать все роуты в Program.cs, каждый endpoint выносится в отдельный класс.

Создаётся небольшой интерфейс:


public interface IEndpoint
{
void MapEndpoint(IEndpointRouteBuilder app);
}


Дальше каждый endpoint просто реализует этот интерфейс:

public class GetFollowerStats : IEndpoint
{
public void MapEndpoint(IEndpointRouteBuilder app)
{
app.MapGet("users/{userId}/followers/stats", async (
Guid userId,
ISender sender) =>
{
var query = new GetFollowerStatsQuery(userId);

Result<FollowerStatsResponse> result = await sender.Send(query);

return result.Match(Results.Ok, CustomResults.Problem);
})
.WithTags(Tags.Users);
}
}


Что это даёт:
• endpoints изолированы по фичам
• код становится намного чище
• проще масштабировать API
• удобно использовать вместе с CQRS / MediatR

Регистрация таких endpoints занимает буквально пару миллисекунд при старте приложения.

Отличный способ держать Minimal API структурированным даже в больших проектах.
6 33 2.7K

Обсуждение 6

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram