话说,做了这么长时间的系统,感觉完全走不动啊,最近终于是解决了“未将对象引用设置到对象的实例”这个问题了,改了三天的代码,然后不是代码的锅,哎,真是无奈啊。
既然说到问题了,就顺便说一下这个可能发生的原因。
找了一个百度搜索前几的博客看了一下,原因还真多啊,原谅我挑了一段复制过来。
1、ViewState 对象为Null。
2、DateSet 空。
3、sql语句或Datebase的原因导致DataReader空。
4、声明字符串变量时未赋空值就应用变量。
5、未用new初始化对象。
6、Session对象为空。
7、对控件赋文本值时,值不存在。
8、使用Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值。
9、使用FindControl时,控件不存在却没有做预处理。
10、重复定义造成未将对象引用设置到对象的实例错误
恩,差不多就写着几个吧,总结了一下大体就那么几个原因:类没实例化、存放数据的容器为空、空值未处理、重复定义。
我看了看,大概出问题的原因也就前两种比较多,然后就是改呗,从头到尾New了一遍,要不是vs拦着我我连接口都New了,好吧,继续出错。然后一步一步的运行,发现出错的是抽象工厂创建的类,一直都是Nothing,难道是反射那写错了?改了又改程序集名和命名空间,怎么改都不对,简直要掀桌子了。
(╯‵□′)╯︵┻━┻
最后还是求助了大腿,发现居然是D层的生成目录没指向U层文件夹下那个Debug,传说U层调用的只是生成的dll文件,我这复制过去的dll是没法更新的,所以就出了那个错误。。。真是不怕不知道,就怕不知道啊,正好学习一下了知识。
昨天刚刚和师姐交流了一下外观层和B层的观点,最近确实这里有点迷糊,分不清功能要放到哪个层里,现在感觉好一点了,外观层就像设计模式中外观模式的外观类,提供一个接口给U层,剩下的和其他B层什么的各种调用封装在外观层中,为的就是解耦合。哎,目前我们的系统还不大,没法让我直观的理解外观层,强行加上去感觉有点架空B层,要是有个例子什么的就好了。
恩,所以在这个依然迷糊的情况之下,我决定以后U层就传个实体给外观,在外观里写什么IF Else之类的调用B层判断。。。管他对不对呢,先写个看看。
最后还有个问题就是,DataTable的问题。不得不说,用这个确实方便,但是问题也多,最大的问题是破坏了封装,对象都面向不到了,直接Teble.Rows什么的了。当初加Sqlhelper的时候就感觉这样别扭,果然还是要改啊,看了好多把Table转成实体的资料,但是没发现一个改Sqlhelper让它直接返回实体的,准备动手试试,要是有什么不可以的地方赶紧告诉我啊,省的我又主动作死去了。。。
好了,这段时间长了点,没写多少代码,但是收获还是不少的,还有各种以前知道的没用过的知识都蹦了出来,计划仔细研究之后把能用的都用了,以后没多少时间这么悠闲的搞程序了。
以上