序言
又到了一年年末,春节将至,提前给各位粉丝们拜个早年,祝各位年年顺风有顺水,发财又发福。
这次我给大家带来了新的API编程思路,一个新的设计模式REPR模式和FastEndpoints类库,希望大家评论区讨论。
1. REPR设计模式
在 .NET 生态系统中,特别是在使用 C# 编程语言时,REPR(Resource, Endpoint, Processor, Repository)设计模式,是一种用于构建清晰、模块化且易于维护的应用程序架构的设计模式。
REPR 设计模式将应用程序划分为四个关键组件,每个组件都有其独特的职责,从而使代码更具可读性、可测试性和可扩展性。
1.1 Resource(资源)
职责:
Resource 是应用程序的外部接口,负责处理外部请求和响应。在
FastEndpoints
中,可以将上文提到的
Endpoint
视为
Resource
,因为每个
Endpoint
表示应用程序对外提供的一个资源或服务。
[Route("/users")]
public classUserEndpoint
{
[HttpGet]
publicasyncTask<IActionResult>GetUsers()
{
// 外部请求处理逻辑
var users =await _userService.GetAllUsersAsync();
returnOk(users);
}
}
1.2 Endpoint(端点)
职责
:
Endpoint
代表应用程序的一个具体端点或资源,负责处理来自
Resource
的请求,调用
Processor
进行业务处理,然后返回响应。
Endpoint
在 REPR 模式中相当于控制器(
Controller
)的角色,但由于
FastEndpoints
框架的引入,
Endpoint
更加轻量、直观。
[Route("/users")]
public classUserEndpoint
{
[HttpGet]
publicasyncTask<IActionResult>GetUsers()
{
// 处理业务逻辑
var users =await _userService.GetAllUsersAsync();
returnOk(users);
}
}
1.3 Processor(处理器)
职责:
Processor
负责处理
Endpoint
中的业务逻辑,包括数据处理、验证、调用服务等。它将
Endpoint
从具体的业务细节中解耦,使得
Endpoint
只需关注请求的处理流程,而具体的业务逻辑由
Processor
完成。
public classUserProcessor
{
privatereadonlyIUserService _userService;
publicUserProcessor(IUserService userService)
{
_userService = userService;
}
publicasyncTask<IEnumerable<User>>GetAllUsersAsync()
{
// 具体的业务逻辑处理
returnawait _userService.GetAllUsersAsync();
}
}
1.4 Repository(存储库)
职责:
Repository
负责与数据存储交互,提供对数据的访问操作。它隐藏了底层数据存储的细节,使
Processor
和
Endpoint
无需关心数据的具体存储细节,提高了系统的可维护性和扩展性。
public classUserRepository:IUserRepository
{
publicasyncTask<IEnumerable<User>>GetAllUsersAsync()
{
// 数据库查询操作
returnawait dbContext.Users.ToListAsync();
}
// 其他数据访问操作...
}
通过采用
REPR
设计模式,我们将应用程序划分为清晰的组件,每个组件都有着独特的职责,使得代码结构更加模块化和可维护。
这种模式的设计让开发者能够更加专注于每个组件的实现,提高了代码的可测试性和可读性。
同时,
REPR
模式在
FastEndpoints
的框架下得到更好的体现,使得
Endpoint
的设计更加轻松而直观,为 .NET 开发者提供了一种优雅而高效的开发方式。
2. FastEndpoints类库介绍
FastEndpoints 类库是一款为 .NET Web API 开发而设计的创新性框架,通过引入独特的设计理念和先进的模式,为开发者提供了更现代、直观的开发体验。以下是该类库的主要优势对比:
Endpoint 模式:
FastEndpoints: 引入了 Endpoint 模式,将每个端点看作一个独立的业务单元,使代码更具模块化和清晰性。
传统方式: 传统的 MVC 模式需要使用控制器,结构相对繁琐,业务逻辑与结构耦合度高。
基于特性的路由配置:
FastEndpoints: 使用特性直接在 Endpoint 方法上定义路由规则,简化了路由配置,使代码更易维护。
传统方式: 传统的全局路由配置文件相对繁琐,需要额外的配置。
响应式编程支持:
FastEndpoints:
天然支持响应式编程,通过引入
async/await
模式,处理异步操作更加方便。
传统方式: 传统回调方式相对冗长,嵌套的回调函数降低了代码的可读性。
REPR 设计模式:
FastEndpoints: 采用 REPR 设计模式,将应用程序划分为 Resource、Endpoint、Processor、Repository 四个组件,提高了代码的可维护性和可测试性。
传统方式: 传统 MVC 模式下缺乏清晰的组件划分,容易造成代码混乱和难以维护。
GitHub 社区支持:
FastEndpoints: 在 GitHub 上托管,得到了活跃的社区支持和贡献者的不断改进,框架不断演进。
传统方式: 传统框架可能缺乏开放的社区平台,更新和改进相对较慢。
通过这些优势,FastEndpoints 类库为 .NET 开发者提供了更加高效、清晰、现代的 Web API 开发方式。在设计和使用上的创新使得开发者能够更专注于业务逻辑的实现,提高了整体的开发体验。
3. 开启上手模式
3.1 安装 FastEndpoints NuGet 包
首先,在你的项目中安装 FastEndpoints NuGet 包。可以使用以下命令:
dotnet add package FastEndpoints
3.2 创建 Endpoint 类
FastEndpoints 引入了 Endpoint 的概念,每个 Endpoint 都是一个处理请求的独立单元。创建一个简单的 Endpoint:
usingFastEndpoints;
public classHelloWorldEndpoint
{
[HttpGet("/hello")]
publicstringHello()=>"Hello, World!";
}
3.3 注册 Endpoint 到服务中
在
Startup.cs
中配置服务并注册 Endpoint:
usingFastEndpoints;
public classStartup
{
publicvoidConfigureServices(IServiceCollection services)
{
services.AddFastEndpoints();
}
publicvoidConfigure(IApplicationBuilder app)
{
app.UseFastEndpoints(endpoints =>
{
endpoints.RegisterEndpoint<HelloWorldEndpoint>();
});
}
}
3.4 模型绑定重定义
FastEndpoints 支持自定义模型绑定方式。例如,你可以重新定义 JSON 请求的模型绑定:
usingFastEndpoints;
public classJsonModelBinder:IModelBinder
{
publicasyncTask<object?>BindModelAsync(HttpContext httpContext,Type modelType)
{
usingvar reader =newStreamReader(httpContext.Request.Body);
var content =await reader.ReadToEndAsync();
return JsonSerializer.Deserialize(content, modelType);
}
}
[ModelBinder(typeof(JsonModelBinder))]
public classCustomModel
{
publicstring Name {get;set;}
}
3.5 安全性
FastEndpoints 提供了一些内建的安全性特性,例如授权和身份验证。可以通过属性在 Endpoint 上定义安全性。
usingFastEndpoints;
[Authorize(Roles ="Admin")]
public classAdminEndpoint
{
[HttpGet("/admin")]
publicstringAdminPanel()=>"Welcome to Admin Panel!";
}
4 与传统 Controller 模式对比
- Endpoint 模式:
更清晰的组织,每个 Endpoint 独立,降低耦合。不需要继承基类,减少层级,提高可读性。
- 模型绑定重定义:
FastEndpoints 允许更灵活的模型绑定方式,可根据需要自定义。
Controller 模式需要在整个控制器中使用相同的绑定方式。
- 安全性:
FastEndpoints 内建安全性属性,可直接应用在 Endpoint 上。
Controller 模式需要在整个控制器中使用相同的身份验证和授权属性。
总结
FastEndpoints 提供了一种更现代、直观的方式来构建 Web API,通过引入 Endpoint 模式、自定义模型绑定和内建的安全性特性,使得开发体验更为轻松。
与传统的 Controller 模式相比,FastEndpoints 提供了更清晰、模块化的组织结构,降低了代码的耦合度。在实际项目中,你可以根据需求选择适合你团队的方式。
👓都看到这了,还在乎点个赞吗?
👓都点赞了,还在乎一个收藏吗?
👓都收藏了,还在乎一个评论吗?