问题:
1.数据表如何在内存中缓存,需要高效、简洁、易维护、可配置。
2.多语言管理,要求可配置
3.C++编译语言,无法适应需要频繁更新的项目,不可维护,需要引用脚本,重新设计。
4.字符集问题,每个库的字符集都不一样,当初设计没有考虑到这个问题,现在暴露出来,需要整理,大大延缓了进度。
5.多线程的数据管理,哪些是线程数据,哪些是全局数据,要进行有效的管理。
6.消息传递设计,需要重构
7.异常处理
解决:
1.RecordSet可以获取到列名和值,多次遍历之后,可以把整张表取出,然后全部存为_variant_t类型,最好是在DataBase中提供接口,以免暴露RecordSet。并且,数据库处理类来进行表的缓存操作,也是合理的,可以重用。但是用着总是不太方便,强类型始终是一道鸿沟,貌似2012提供了动态类型,有时间可以研究。(目前的解决方案使用了三重hash,不爽的地方有:1.层次太多,可读性和效率下降;key只能是string,不合理;值是_variant_t类型,暴露了com。)
2.在1的基础上,很容易建立语言管理
3.需要引入脚本,但是设计需要学习。
4.每个库的字符集不一样,在设计时要考虑到,需要统一下来,有差异的,提供公用的多字节和宽字节的转化函数,必要时进行封装。(本项目中,其实是CDabaBase中的语句有问题,多此一举了,采用正确的方法,问题迎刃而解)再一个问题是运算符的重载模糊了,有必要再学习一下,在_variant_t和_bstr_t中,运算符重载用得多。
5.未知
6.消息的几种传递方式:广播(低效,在窗口程序中用到);多层次分发(清晰,但是较为复杂,维护麻烦);消息映射(高效,无层次划分)。目前是多层次分发,需要重构为定向通知,方法为建立消息和处理函数的映射表,在Java中见到过,C++不知是否可行。修改之后的代码,在每个线程中使用消息映射,不知道如何做全局的映射。
7.C++标准语法无需进行异常捕获,做好空指针判断和日志记录足矣。