// ============================================================================
// 【文件说明】HwPortalTableDataInfo.cs - 分页数据返回包装类
// ============================================================================
// 这个类用于统一返回"表格分页数据"的格式。
// 在 Java 若依(RuoYi)框架中,有一个 TableDataInfo 类做同样的事情。
// 前端通常期望这样的 JSON 结构:
// {
// "code": 200,
// "msg": "查询成功",
// "total": 100, // 总记录数
// "rows": [...] // 当前页的数据列表
// }
// ============================================================================
namespace Admin.NET.Plugin.HwPortal;
///
/// 分页数据返回包装类。
///
/// 【C# 语法知识点 - 泛型类 <T>】
/// public class HwPortalTableDataInfo<T> 中的 <T> 是泛型参数。
/// 泛型允许你编写"类型无关"的代码,使用时再指定具体类型。
///
/// 例如:
/// - HwPortalTableDataInfo<HwWeb> 表示"包含 HwWeb 列表的分页数据"
/// - HwPortalTableDataInfo<HwProductInfo> 表示"包含 HwProductInfo 列表的分页数据"
///
/// 对比 Java:
/// Java 的泛型写法几乎一样:public class TableDataInfo<T> { ... }
/// 但 Java 有"类型擦除",运行时 T 只是 Object。
/// C# 的泛型在运行时是真实类型,性能更好。
///
///
/// 【为什么需要这个类?】
/// 这是"统一响应格式"的最佳实践:
/// - 前端不需要猜测返回格式,所有接口都返回相同结构
/// - 前端分页组件可以直接读取 total 和 rows
/// - 错误处理统一:code 不为 200 时显示 msg
///
///
/// 数据行类型,例如 HwWeb、HwProductInfo 等
public class HwPortalTableDataInfo
{
///
/// 状态码,200 表示成功。
///
/// 【C# 语法知识点 - 属性初始化器】
/// public int Code { get; set; } = 200;
/// 这里的 = 200 是"属性默认值"。
/// 如果创建对象时不赋值,Code 就自动是 200。
///
/// 对比 Java:
/// Java 需要在构造函数里赋默认值:
/// private int code = 200;
/// 或者:
/// public TableDataInfo() { this.code = 200; }
///
///
public int Code { get; set; } = 200;
///
/// 返回消息。
///
public string Msg { get; set; } = "查询成功";
///
/// 总记录数(用于前端分页计算)。
///
/// 前端分页组件需要知道总共有多少条记录,
/// 才能计算总页数 = Math.Ceiling(total / pageSize)。
///
///
public long Total { get; set; }
///
/// 当前页的数据列表。
///
/// 【C# 语法知识点 - IReadOnlyList<T>】
/// IReadOnlyList<T> 是"只读列表接口"。
/// 它比 List<T> 更安全,因为调用者不能修改列表内容(不能 Add/Remove)。
///
/// 对比 Java:
/// Java 没有内置的只读列表接口,通常用 List<T> 或 Collections.unmodifiableList()。
/// C# 的 IReadOnlyList<T> 是接口级别的只读约束,更清晰。
///
///
/// 【C# 语法知识点 - Array.Empty<T>()】
/// = Array.Empty<T>() 是"空数组的单例"。
/// 每次调用都返回同一个实例,比 new T[0] 更节省内存。
///
/// 这是一个小优化点:避免每次 new 空数组产生垃圾对象。
///
///
public IReadOnlyList Rows { get; set; } = Array.Empty();
}