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