using Microsoft.AspNetCore.Http;
namespace Dpz.Core.Service.Mediator.Features.Media.Commands;
/// <summary>
/// 发布或更新照片信息的请求。
/// </summary>
public class PublishPhotoRequest : IRequest<ResponseResult>
{
/// <summary>
/// 照片
/// </summary>
public IFormFile? Photo { get; set; }
/// <summary>
/// 描述
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 标签
/// </summary>
public List<string> Tags
{
get => (field ?? []).Select(x => x.Trim()).Where(x => !string.IsNullOrEmpty(x)).ToList();
set;
} = [];
/// <summary>
/// 记录ID
/// </summary>
public string? Id { get; set; }
/// <summary>
/// 创建者
/// </summary>
public required VmUserInfo Creator { get; set; }
/// <summary>
/// 清理相册缓存。
/// </summary>
public Func<IReadOnlyCollection<string>, CancellationToken, Task>? ClearCacheAsync { get; set; }
/// <summary>
/// 上传
/// </summary>
public required Func<
byte[],
List<string>,
string,
CancellationToken,
Task<UploadResult>
> UploadAsync { get; set; }
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这是一个基于 MediatR 模式的命令请求类,用于处理照片的发布或更新操作。让我详细解释一下这个类的各个组成部分:
类的基本信息
public class PublishPhotoRequest : IRequest<ResponseResult>
- 继承自
IRequest<ResponseResult>,这是 MediatR 的接口 - 表示这是一个会返回
ResponseResult类型结果的请求命令
属性详解
1. 照片文件
public IFormFile? Photo { get; set; }
- 用于接收上传的照片文件
IFormFile是 ASP.NET Core 中处理文件上传的接口- 可为空,支持更新操作时不重新上传照片
2. 描述信息
public string? Description { get; set; }
- 照片的描述文字,可选
3. 标签处理
public List<string> Tags
{
get => (field ?? []).Select(x => x.Trim()).Where(x => !string.IsNullOrEmpty(x)).ToList();
set;
} = [];
- 使用了 C# 12 的新特性
field关键字 - Get 访问器会自动:
- 去除每个标签的前后空格 (
Trim()) - 过滤掉空字符串
- 返回清理后的标签列表
- 去除每个标签的前后空格 (
- 默认值为空列表
4. 记录ID
public string? Id { get; set; }
- 用于区分新增还是更新操作
- 为空时表示新增,有值时表示更新
5. 创建者信息
public required VmUserInfo Creator { get; set; }
- 使用
required关键字,表示必须提供 - 记录照片的创建者信息
6. 缓存清理委托
public Func<IReadOnlyCollection<string>, CancellationToken, Task>? ClearCacheAsync { get; set; }
- 可选的异步委托函数
- 用于在操作完成后清理相关的相册缓存
- 接受字符串集合和取消令牌作为参数
7. 上传处理委托
public required Func<byte[], List<string>, string, CancellationToken, Task<UploadResult>> UploadAsync { get; set; }
- 必需的异步委托函数
- 处理照片的实际上传逻辑
- 参数包括:字节数组(照片数据)、标签列表、字符串参数、取消令牌
- 返回上传结果
设计特点
- 依赖注入友好:通过委托的方式注入具体的业务逻辑
- 支持异步操作:所有耗时操作都支持
CancellationToken - 数据验证:标签属性有自动清理逻辑
- 灵活性:通过可选的 ID 支持新增和更新两种场景
- 关注点分离:请求类只负责数据传输,具体业务逻辑通过委托注入
这种设计模式常用于 CQRS(命令查询责任分离)架构中,有助于保持代码的清晰和可测试性。
评论加载中...