网站建设技术 论坛,黄冈工程建设标准造价信息网,站长百度,网站主页没有关键词2019独角兽企业重金招聘Python工程师标准 关于爱说说在技术选型的文章见#xff1a;爱说说技术原理方案的定选思考过程 本篇将讲述“爱说说”比较重大的技术问题点及解决手段#xff1a; 爱说说#xff1a;http://speak.cyqdata.com/ 杂说几句 关于爱说说在技术选型的文章见爱说说技术原理方案的定选思考过程 本篇将讲述“爱说说”比较重大的技术问题点及解决手段 爱说说http://speak.cyqdata.com/ 杂说几句 一开始原本是打算在秋式开源团队找一JS人才来引导前台页面的呈现的毕竟本人在JS还停留在原始的编码阶段于是当时聊了一下。 再后来接下来几天由于秋式开源团队内部管理上有点小调整还有新开任务小组的事连续忙了几天“爱说说”就也停了几天。 几天过后回到群里Call人发现原来JS的人才一去无踪影了没法只好自己动手了。 在定好技术方案后下面开始技术的分析 “爱说说”的逻辑 前端html-》发送ajax请求-》后端ashx处理并返回Json-》前端接收Json并解析显示 从后端Ashx说起 一TXT文本交互的技术解析 1数据写入每次往文本的最后面写一条Json数据语句很简单 public void AppendText(string appendText) { File.AppendAllText(FilePath, appendText); } 利用System.IO.File类即可轻松处理。 2数据读取内存表缓存失效时需要重新加载TXT文本的Json数据语句也很简单 public string LoadText() { return File.ReadAllText(FilePath); } 还是一行代码处理简单。 3删除功能需要移除TXT文本内的某行Json数据也很容易的说 public void RemoveText(string removeText) { File.WriteAllText(FilePath, File.ReadAllText(FilePath).Replace(removeText, string.Empty)); } 还是一行的说读完替换然后重新写入。 OK和IO的交互设计相当的简洁也就这三个函数了写读删除。 二Json的交互的技术解析 1数据如何写入 从上面的分析上看提交肯定是一行一行的数据于是每次写入都是一条Json语句。 2功能冲突这和CYQ.Data.Table下的MDataTable的功能有什么冲突 MDataTable有ToJson功能也有LoadFromJson功能能把数据表转成Json也能从Json解析还原成内存表。 那数据行有没有ToJson功能答案没有 替换方案可有答案有! 可以MDataRow.ToTable().ToJson()即转成表格再输出Json看似挺好。 在好之前看一下MDataTable的ToJson()输出什么 {count:2,error:,success:true,data:[ {ID:2,ParentID:-1,UserID:2,NickName:dddd,Body:aaddd,CreatedOn:2011-4-24 0:22:21}, {ID:1,ParentID:-1,UserID:1,NickName:dddd,Body:aaaaa,CreatedOn:2011-4-24 1:19:37}]} 格式就是这个了前面是一些共有属性,data内才是数据行。 如果每次把这样的数据写完文本到时候读取解析还原成表格肯定有问题。 3如何解决冲突扩展功能为单独的数据行添加ToJson()功能 只单独输出 {ID:2,ParentID:-1,UserID:2,NickName:dddd,Body:aaddd,CreatedOn:2011-4-24 0:22:21} 这样子重复的往后写感觉就省了点字节而且也清爽秀多。 4扩展再扩展MDataTable.LoadFromJson要支持上 不过这么重复的写单行Json数据再读取MDataTable是解析不了的咋整 解析不了就扩展一下把它解析了由于CYQ.Data的Json都是本人手动写的解析。 所以修改来解析这样一行一行的数据还是可以处理的。三改两改就支持上了一切很好。 现状就是可以往TXT里写出这么一系列的文本了 {ID:1,ParentID:-1,UserID:1,NickName:小样...,Body:爱说说...有话就说quot;,第一个哟哟,CreatedOn:4/20/2011 8:35:10 AM} {ID:2,ParentID:-1,UserID:2,NickName:路过秋天,Body:不知道怎么回事说随便来几字明字何期多。,CreatedOn:4/20/2011 8:37:35 AM} 再然后就是MDataTable.LoadFromjson又可以从这种格式还原成内存表了。 技术手段到了这里光明灿烂了。 一切流程很好 1客户端提交数据-》 2Ashx提交数据-》写入内存表然后把数据行ToJson写入文本。 3内存表在内存总有失效的时候失效时LoadFromJson又还原成表格又继续。 5:另一个重大的技术问题 一切看似很好可是后面还是会有些问题呢的什么问题往下看 看一下表格的原始属性 内在表定义 private static MDataTable _Table null;//内存数据表 表格的基本列 _Table.Columns.Add(ID, SqlDbType.Int);//ID标识 _Table.Columns.Add(ParentID, SqlDbType.Int);//0说明是回贴 _Table.Columns.Add(UserID, SqlDbType.Int); _Table.Columns.Add(NickName, SqlDbType.NVarChar); _Table.Columns.Add(Body, SqlDbType.NVarChar);//内容 _Table.Columns.Add(CreatedOn, SqlDbType.DateTime);//创建日期 问题 在开始定义前都是有不同的类型的但如果内在表失效时重新还原又是什么状况 由于Json全是字符串在还原为内存表MDataTable时默认全都置为SqlDbType.NVarChar 于是表格的字段类型全变字符串了如果只是还原后用于绑定显示就没啥问题了如果此表格还需要进行一些复杂判断比较就比较纠结了。 正如我要查询ID数字的行全是字符串就真的很纠结。 如何解决 想法一有想法不是办法 开始纠结还原后的数据类型问题通过判断第一行Json的文本值来定义设置字段类型比如 检测值是数字型就Int。 检测值是日期型就DateTime 最后就默认给NVarChar 为何不是办法 看似挺好如果文本字段内容第一行是数字其它行又是字符串呢后面的内容不就纠结了 想法二有想法也是办法 既然首行取值判断不行如果首行存表架构呢 首行Json字段架构如下 {ID:System.Int32,ParentID:System.Int32,UserID:System.Int32,NickName:System.String,Body:System.String,CreatedOn:System.DateTime} 于是解析时就可以准确的还原了那如何输出这行架构行 于是MDataColumn也多了个ToJson功能用于输出表架构至此Json的交互方面也大功告成了 三总结 解决了这两个重大的技术难题接下来的还有没有其它技术问题 有查询功能即将扩展的MDataTable.Select(......)功能。 还有没有 大的没了还有就是技术细节问题了如接收参数定义文本路径定义最大行ID等。 下节解说敬请期待。 关注点MDataTable在“爱说说”扩展了这么多强劲的功能啥时候发布 很快可能是五一前后会在 CYQ.Data V4.5正式版中集成也敬请期待与关注。 转载于:https://my.oschina.net/secyaher/blog/274034