重构之路 柳暗花明

经过一段时间的学习,查阅各种资料,询问高手,对于机房收费系统的代码编写渐入佳境,同时在遇到问题后也不再茫然失措,而是静下心来去找到问题的根源,进而找到解决的办法。

在使用泛型集合作为函数的返回值的实践中,遇到了一个很普遍的问题,那就是在将DataTable类型的返回结果转换为以实体类型为集合元素的泛型集合List的过程中,由于数据类型的转换导致的错误,具体如下图所示:

我们可以看到错误提示说的是Decimal类型的对象无法转换为Double类型,一开始我并知道这个问题的原因,点击“获取此异常的常规帮助”,可以看到下面的提示:

看了半天还是没能知道什么意思,于是就找用过泛型集合的人问了问是怎么个情况,人家说是在向实体类型转换的时候,由于数据类型不一致导致的,也没说到底在哪出了问题,我想既然是decimal无法转换为double类型,那么就不用double类型的属性,因此找到本次要转换的目标实体类型QueryBalanceEntity,查看里面各个属性的数据类型,发现只有属性Balance是double类型的,于是将其改成了decimal类型,然后从新编译,问题解决了,但是紧接着又发现了另一个异常,如下图:

返回结果中少了一个数据项,使用断点逐步调试,没能发现问题的根源,数据库中明明有数据,但是却显示不出来,在将返回结果传递到U层的过程中有一个将DataTable的换成List的步骤,因此我要看看班级的信息是否在Datatable中,所以在代码中加了一句输出DataTable中相应值的语句如下:

结果班级的信息的确是返回来了,但是没有显示出来,肯定是泛型集合的使用出了问题,因此就打开数据库进行查看,发现实体类型QueryBalanceEntity中的属性班级的名称是ClassName,而在数据库中字段名称是class,根本不一致,鉴于class在编程语言中是关键字,所以就把数据库的字段名称改成了classname,如下:

这样数据库中的字段和实体类中的属性名称对应起来,才可以顺利将Datatable类型的的数据结构转换为List类型的数据结构,方便使用。

对于泛型集合的使用,并没有过多的去研究,而是直接将转换函数拷贝过来,问清楚参数的意义和使用方法,即可在系统中使用,这是最快的学习方式,在使用中学习,而不是先研究半天理论,完了之后还是不知道怎么使用,但是在使用完了之后要回过头了去总结,这样才是真正的高效学习。

重构之路 柳暗花明,布布扣,bubuko.com

时间: 2024-10-13 06:24:38

重构之路 柳暗花明的相关文章

Hybird框架UI重构之路:四、分而治之

上文回顾:Hybird框架UI重构之路:三.工欲善其事,必先利其器 上一篇文章有说到less.grunt这两个工具,是为了css.js分模块使用的.UI框架提供给使用者的时候,是一个大的xxx.js.xxx.css,但在开发时候,必须划分模块. CSS模块划分 1.variables.less 这里面是一些样式的变量.函数 例: 字体: @baseFontSize: 20px; 圆角: .rounded-corners (@radius: 5px) { border-radius: @radiu

重构之路 组合查询之传参+存储过程

上篇博文给大家一起讨论了实现组合查询的一种方法,即在U层将select语句的where子句部分组装好,赋给一个字符串变量,传到D层然后与select子句组成完整的sql语句,之后执行,返回查询结果,就是这么简单,但是博文的结尾也留下了一个疑问,这种方法的安全性有点欠佳,有没有相对好一点的办法呢? 答案是肯定的,这次我们一起来看看我实现的另一种方法.首先给大家简单介绍一下这种方法的思路,其实也比较简单,最初我是想在程序代码里写sql查询语句的,然后将组合查询的各个条件的值当做实体参数(现在实体层定

重构之路 组合查询之传递SQL字符串

既然是使用VB.NET语言对机房收费系统进行重构,那么无可避免的要去解决组合查询的问题,在VB版的实现中这是一个难点,不过大家还是依靠自己或者共同的智慧解决了这个看似复杂的问题. 如今编程的语言不同是一方面,更重要的是系统的结构不一样了,采用了三层架构去实现系统,这样一来就要考虑组合查询的在三层结构中的实现方法.当然,组合查询的核心办法是不变的,都是通过将查询的各个条件组装成SQL查询语句的where子句来实现的,问题就是这个where子句的组装在哪里完成? 如果放在U层完成,那么我们向下传递的

重构之路 峰回路转

其实敲代码的时间并不是太长,往往调试的时间很长,登录早就敲完了,可是迟迟运行不出想要的结果,甚至不能完整的从U层运行到D层,实在是让人揪心,先后请了三位高手帮我调试,愣是没有发现错误在哪里. 在今天的上午,问题有了转机,终于是将登录完整的运行下来了,也得到了预期的反馈,因此在下午的时候就再次尝试加入配置文件,没想到一个意想不到的警告信息让我相信之前的判断是正确的,于是顺藤摸瓜终于找到了问题的根源,万万没想到,一系列问题的答案竟是如此简单,让人哭笑不得. 先来分析分析报错信息,以便找到解决问题的线

Hybird框架UI重构之路:五、前端那点事儿(HTML、CSS)

上文回顾 :Hybird框架UI重构之路:四.分而治之 这里讲述在开发的过程中,一些HTML.CSS的关键点. 单页模式的页面结构 在单页模式中,弱化HTML的概念,把HTML当成一个容器,BODY中显示的主体内容才是页面,一个HTML容器中可以存放1个或者多个页面,每个页面放置于section中.而一个页面(section)中必有主体内容(content),也有可能包含头部内容.底部内容,甚至一些侧滑菜单等. 所以,以我们通常看到的一个移动应用的界面中包含了顶部Title和主体内容的页面代码如

重构之路 狼烟四起

虽然已经做过一遍机房收费系统,但是要用面向对象技术和分层技术对其进行重构,的确是一件不容易的事,从最开始的需求分析,到使用UML对机房收费系统进行建模,再到后期的代码实现以及文档编写,无一例外的让人觉得纠结甚至是虐心.为什么会有这样的赶脚?我们来一探究竟. 首先是需求分析,虽然大家都已经做过一遍了,但是我不敢保证你们都能很好的理解这个系统的需求,因此这是一个纠结点.其次就是画图,必要的图有用例图,系统的包图,以及各个包里的类图和时序图,这些图对后期的代码编写十分重要,因此必须要画的. 在使用面向

Hybird框架UI重构之路:六、前端那点事儿(Javascript)

上文回顾 :Hybird框架UI重构之路:五.前端那点事儿(HTML.CSS) 这里讲述在开发的过程中,一些JS的关键点. 换肤 对于终端的换肤,我之前一篇文章有说了我的想法. 请查看:http://www.cnblogs.com/lovesong/p/4122262.html iscroll的问题 1.使用iscroll的页面里面有表单元素,当键盘弹出再缩回后,页面拖不到最顶地方. 这个在android上总出现,使用的iscroll版本是4.2.5. 这原来是个很棘手的问题,导致了有input

Hybird框架UI重构之路:三、工欲善其事,必先利其器

上篇回顾:Hybird框架UI重构之路:二.事出有因 工欲善其事,必先利其器,事是重构的目标,器是开发环境. 这篇文章将讲述重构时的UI框架的目录结构,且需要使用的开发工具. 目录结构 demo : 开发框架的模板(单页模式) demo-muti : 开发框架的模板(多页模式) demo-scene : 示例模板.一个完整的示例,目的是给使用者稍作修改就可以使用在项目上. demo-template : 给使用者使用的开发模板. demo-whole : 可在PC上演示的示例模板 dist :

Hybird框架UI重构之路:二、事出有因

上篇回顾:Hybird框架UI重构之路:一.师其长技以自强 一切的重构都是有原因的,或许为了更快速度.更好体验.更快捷开发等,于是就有了自己的开发目标,简单看看未重构前UI("中国移动式"风格). 上一篇文章说明调查了这么多类似框架,对比了他们的特点,而比对自身UI,也是存在可优化的地方,于是有了下面几点目标(仅仅UI框架方面,不涉及原生部分). (1)规范开发 1.SVN版本控制.之前的UI框架部分是没有进行svn版本控制的,于是会导致个问题——有些文件在多次修改后,连当初的开发者都