You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

157 lines
4.7 KiB
C#

// ============================================================================
// 【文件说明】SearchResultDTO.cs - 搜索结果项 DTO
// ============================================================================
// 这是搜索结果列表中的单项数据结构。
//
// 【设计说明】
// 这是面向前端的搜索结果格式:
// - 不直接返回数据库实体
// - 只包含前端需要的字段
// - 字段经过处理(如 Snippet 是截断后的摘要)
//
// 【与 SearchRawRecord 的区别】
// - SearchRawRecord旧版搜索的原始数据字段多且可能为空
// - SearchResultDTO新版搜索的结果数据字段精简且友好
//
// 【与 Java Spring Boot 的对比】
// Java 若依的搜索结果 VO
// public class SearchResultVO {
// private String sourceType;
// private String title;
// private String snippet;
// // getter/setter...
// }
//
// C# 用自动属性,代码更简洁。
// ============================================================================
namespace Admin.NET.Plugin.HwPortal;
/// <summary>
/// 搜索结果项。
/// <para>
/// 【业务场景】
/// 前端搜索结果列表中的单个条目:
/// - 展示标题、摘要
/// - 点击跳转到详情页
/// - 显示来源类型图标
/// </para>
/// <para>
/// 【设计模式 - DTO vs Entity】
/// 为什么不直接返回数据库实体?
/// 1. 安全性:实体可能包含敏感字段
/// 2. 灵活性DTO 可以组合多个实体的字段
/// 3. 性能DTO 只返回需要的字段,减少数据传输
/// 4. 解耦:数据库结构变化不影响 API 契约
/// </para>
/// </summary>
public class SearchResultDTO
{
/// <summary>
/// 来源类型。
/// <para>
/// 【允许值】
/// - menu菜单
/// - web页面
/// - web1页面1
/// - document文档
/// - configType配置类型
///
/// 【前端用途】
/// 用于显示不同类型的结果图标。
/// </para>
/// </summary>
public string SourceType { get; set; }
/// <summary>
/// 标题。
/// <para>
/// 【业务说明】
/// 搜索结果展示的主要文本。
/// 用于搜索结果列表的标题显示。
/// </para>
/// </summary>
public string Title { get; set; }
/// <summary>
/// 内容摘要。
/// <para>
/// 【业务说明】
/// 从 Content 中截取的摘要:
/// - 包含搜索关键词的上下文
/// - 长度有限,适合列表展示
/// - 可能包含高亮标记
/// </para>
/// </summary>
public string Snippet { get; set; }
/// <summary>
/// 相关性得分。
/// <para>
/// 【业务说明】
/// 用于搜索结果排序:
/// - 分数越高,排名越靠前
/// - 前端可以显示"相关度"提示
/// </para>
/// <para>
/// 【C# 语法知识点 - 可空值类型】
/// int? 是可空的整型:
/// - 可以是 null表示未计算得分
/// - 可以是 int 值
/// </para>
/// </summary>
public int? Score { get; set; }
/// <summary>
/// 路由路径。
/// <para>
/// 【业务说明】
/// 前端跳转的路由路径。
/// 例如:/product/detail
/// </para>
/// </summary>
public string Route { get; set; }
/// <summary>
/// 路由查询参数(字典格式)。
/// <para>
/// 【业务说明】
/// 路由的查询参数,已解析为字典:
/// - Key参数名
/// - Value参数值可能是字符串、数字等
///
/// 例如:{"id": "123", "type": "product"}
/// </para>
/// <para>
/// 【C# 语法知识点 - Dictionary&lt;K,V&gt; 字典】
/// Dictionary&lt;string, object&gt; 是键值对集合:
/// - Keystring 类型
/// - Valueobject 类型(可以存储任意类型)
///
/// 对比 Java
/// Java: Map&lt;String, Object&gt; routeQuery = new HashMap&lt;&gt;();
///
/// 为什么用 object 类型?
/// - 参数值可能是字符串、数字、布尔值等
/// - object 是所有类型的基类,可以存储任意值
/// </para>
/// <para>
/// 【C# 语法知识点 - 集合初始化器】
/// = new() 是属性初始化器:
/// - 创建对象时自动初始化字典
/// - 避免 null 引用异常
/// </para>
/// </summary>
public Dictionary<string, object> RouteQuery { get; set; } = new();
/// <summary>
/// 编辑路由。
/// <para>
/// 【业务说明】
/// 管理后台的编辑页面路由。
/// 用于从搜索结果直接跳转到编辑页面。
/// </para>
/// </summary>
public string EditRoute { get; set; }
}