namespace PublicTools.XMLDataBase
{
    /// <summary>
    /// 基本的数据存储
    /// 此数据的管理通常是一些本地数据:例如关卡的信息,玩家的个人信息,成绩分数等等
    /// 通关信息,成就等会发生变化的数据。
    /// 如果是不变的数据存放在哪里?或者说要跟随版本进行管理的数据存放在游戏资源路径。
    /// 跟随服务器进行编辑,修改,维护。
    /// 如果升级导致的数据格式变化如何维护?这部分数据如果用户卸载或者重新安装会发生什么变化?
    /// 数据不会丢,但是数据要发生变化了如何管理?是否要添加版本号进行维护?
    /// 如何进行数据的安全的升级?无法实现数据的安全升级?为何?如何判断数据已升级?
    /// </summary>
    public class XFileInfo
    {
        /// <summary>
        /// 类名
        /// </summary>
        private string tableName;
        /// <summary>
        /// 对应的文件名
        /// 
        /// </summary>
        private string filePath;
        /// <summary>
        /// 目标路径
        /// </summary>
        private string targetPath;
        /// <summary>
        /// 默认可写,不可写的资源无法克隆,仅可写资源能克隆数据库
        /// </summary>
        private bool isCanWrite = false;
        /// <summary>
        /// 文件对应的MD5码,用来检测是否初始化完成或者是否发生了修改编辑等等
        /// 如何防止公共读的资源被外部修改?
        /// 每次对资源进行编辑记录时,更新对应文件的MD5,每次在进入游戏场景时,先校对数据的MD5
        /// 如果存在文件的MD5不一致,即可重置和回退至原系统,并再次更新数据
        /// 每次更新MD5记录表后,向游戏数据库插入更新后的MD5值。
        /// 校对顺序:先检测校对表,是否存在,如果不存在,则读取源数据。
        /// 然后校验校对表是否与系统一致,如果一致开始校验具体的数据。如果存在数据不一致代表此表被修改,则读取源数据并覆盖
        /// 更新时,每更新一条数据表,就更新一下MD5表,MD5表更新后,更新游戏数据库,使之与数据进行同步
        /// 数据如何被回退呢?只能从头开始,但是不能回退至上一个版本
        /// 系统的关键数据如何编辑?
        /// </summary>
        private string md5;
        /// <summary>
        /// 标识版本号,如果数据格式发生了变化:一般是大版本的更新
        /// 如何保证版本安全更新?不能保证?大版本如何进行安全更新?
        /// </summary>
        private string version;
        public string TableName { get => tableName; set => tableName = value; }
        public string FilePath { get => filePath; set => filePath = value; }
        public string TargetPath { get => targetPath; set => targetPath = value; }
        public bool IsCanWrite { get => isCanWrite; set => isCanWrite = value; }
        public string Md5 { get => md5; set => md5 = value; }
        public string Version { get => version; set => version = value; }
    }
}