helloyesyes 发表于 2013-2-1 09:47:07

被误解的C++——螺蛳壳里做道场

螺蛳壳里做道场

“螺蛳壳里做道场”是我们那里的一句俗话,意思是在很受限制、充满约束的情况下,做一些复杂的事情。前段时间我就遇到这么一个问题。
经常开发MIS类的应用,不免需要和数据库打交道。一直使用VC,(唉,反正我们公司已经下了ms这条贼船了),访问数据库无非就是ODBC、DAO、OleDB、ADO什么的。(ADO.net因为无法控制服务端游标,被我一脚踢出候选名单)。
我是个懒人。ODBC和OleDB。虽然功能强大,使用灵活,可一大堆Workaround,让我直起鸡皮疙瘩。所以,我打算选用一个直接可用的类库,帮助我简化开发。MFC的CResoultSet什么的太臃肿了,没入我的法眼。这样,就只能选择OleDB Template了。OleDB Template倒是不错,policy化,使用起来既方便,又高效。其方便程度和ADO相差无几。
唉,我也是一个爱多事的人。有这么个不错的库,用便是了,可我却觉得不满意。问题主要集中在三个方面:
<!---->1. <!---->policy划分不合理,缺少游标控制、读写控制和书签控制的policy;
<!---->2. <!---->policy实现也未能充分发挥静态类型约束的优点;
<!---->3. <!---->只能输出原始类型的数据,不能转换输出。
针对这三个方面,我打算改造OleDB Template。当然我也可以重做一个库,但是这不符合我懒人的风格。于是,我决定通过扩展OleDB模板和类达到这个目的。

我最主要的改造对象是CCommand模板。这个模板的声明如下:

<div style="">http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.giftemplate<http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifclassTAccessor=CNoAccessor,http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.giftemplate<typenameT>classTRowset=CRowset,http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifclassTMultiple=CNoMultipleResultshttp://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif>
http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gifclassCCommand;http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif
页: [1]
查看完整版本: 被误解的C++——螺蛳壳里做道场