为了方便维护,以后无论如何,数据库操作一定使用封装的强类型,或者自己封装的数据操作类。后记,使用分布式查询解决多个数据库之间的查询操作。
一、项目打了之后,我操作数据库的常用的办法三种。
第一种使用我之前封装操作SQL的数据库操作类,直接运行SQL语句
第二种直接使用.net的SQL操作方法直接运行SQL语句
第三种使用系统封装的强类型Dataset
不常用的是使用自己封装的数据库操作类
二、现在矛盾的地方,我的项目是大项目中其中之一也能完全独立出去。
如果完全独立出去,出了后台查询使用已经封装好了的,其他的数据库得使用自己的一套。
如果不完全独立出去,那么大系统与我的项目使用同一数据库。
现在的情况比较乱,如果在两个系统在同一个数据库的时候,可能表名字会修改,数据库的名字会改,用户名与密码会改。另外在对数进行类似表结构这样的升级的时候都会出现问题。
三、解决办法,所有数据库封装与UI完全封开,以后仅仅修改数据库操作的部分。
后记:对于上面提到的第二点的那个矛盾,突然意识到如果使用分布式查询不就可以很好解决此问题。
例如
一、在不同情况下使用不同数据库里的表。人员表,如果我使用我自己的人员表,我建立一套自己的人员表,如果使用大系统里的人员表,我可以用视图封装一个与我系统中名称一样的分布式查询视图。
二、对于一个查询同时使用两个数据库里的表。例如字典表,可能两个数据库里面都有字典表,只要把表结构做的城统一的。我就可以通过分布式查询直接返回一个包含两个数据库表的查询结果。
当然对于查询操作我可以封装为视图或者所有的数据库操作使用存储过程。
这样的好处就是屏蔽了访问不同数据库时合并数据的操作。在数据库中直接解决,程序所面对的数据就像在一个数据库里一样。
当然对于一些复杂的系统例如可能要查询多个可能都是不同版本的数据系统,那么直接在数据库上解决分布式查询就有些困难了。这时候可以尝试封装为类库。所有的数据库查询操作封装成类库里的函数操作。由于.net提过linq功能,我可以把各个数据库符合查询要求的结果数据先加载到Dataset中,然后使用linq再进行整合查询,例如按某一字段排序。
个人觉得,分布式的查询智能是尽可能简单,能够不分布式查询的就分布式查询。对于不同数据直接的依耐性越重,程序的维护越复杂。
另外在搜索过程中发现对于远程调用方面对于分布式查询也有着很好的应用,我并不是很了解这块。目前使用的远程调用是PHPRPC服务,考虑学习下.NET Remoting