以前一两个月才出一篇,这三天有点变态地连续1天1篇(其实都是上周末两天写好的存货)。
短期应该没有新的和此框架相关的文章要写了,这应该是最后一篇,大伙且看且珍惜。
前两篇讲数据库读写分离和分布式缓存,这篇隆重地介绍一下:mdatatable,毕竟它有很多未公布或隐藏技能,值得一看。
1:操作数据库:maction、mproc (名称空间:cyq.data)
2:日志操作:log、syslogs(名称空间:cyq.data)
3:配置和性能调试:appconfig、appdebug(名称空间:cyq.data)
4:内存表体系:mdatatable(mdatarow、mdatacell) (名称空间:cyq.data.table)
5:json系:jsonhelper (名称空间:cyq.data.tool)
6:本地缓存和分布式缓存:cachemanage (名称空间:cyq.data.cache)
掌握上面几个类,基本就掌握了框架的核心了。
1:实体型操作数据库:ormbase、simpleormbase、dbfast (名称空间:cyq.data.orm)
2:html/xhtml模板引擎:xhtmlaction、rss (名称空间:cyq.data.xml)
3:aop编程:iaop接口 (名称空间:cyq.data.aop)
4:数据库结构工具:dbtool (名称空间:cyq.data.tool)
5:语法糖及ui扩展:ifield接口、iuivalue接口、registerui (名称空间:cyq.data.extension)
以上就是整个框架的所有,全部加起来目前编绎才300k左右,仅有一个dll,无任何其它直接依赖,但能做的事超出你想象。
下面开始介绍mdatatable
先看一张图:

和支持的所有数据库打通,这就是mdatatable的强大之处,任何一种数据库的数据只要流向mdatatable,都可以自由转到任意一种数据库输出。
而实现这一切的方法就是:acceptchanges (acceptop op, string newconn, params object[] jointprimarykeys)
深受广大网友喜爱的dbimport导数据库工具,就是靠它完成的。
mdatatable和主流数据类型也打通了,即任意一种数据,经过mdatatable,就可以以任意一种数据格式输出。
而实现这一切的方法就是:mdatatable.createfrom (object data) 和 tojson()、toxml()、tolist<t>()。
createfrom除了支持这几种,其它字典型的如:dictionary、hashtable等实现ienumerable接口的都可以往里塞。
如果只有一行数据,就对应mdatarow的loadfrom方法。
对这种几种类型,只需要mdatatable dt=xxx;
静态方法只有一个,就是上面提到的:createfrom。
图里漏了一个方法:获取某列的集合:list<t> getcolumnitems<t>
原来数据是这样的:
调用之后数据是这样的:
先看这一段截自分布式缓存memcache里的代码:
status有n个dictionary,每个字段转成mdatatable后是这样的:
每个表的key是一样的,所以通过指定表的join类为key,然后把value改一下名称即可。
表join后的结果是这样的:
既然为动态属性,说明它很动:
a:平时就是一个属性,你可以把它当临时存档对象。
b:适用于批量事务时:如果acceptchanges失败,dynamicdata会存档exception异常。
c:通常一个指acceptchanges是一个事务,如果外部也有事务,希望在同一个事务时:
看一下asp.net aries里关于提交用户权限的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
<code>using</code> <code>(maction action = </code><code>new</code> <code>maction(tablenames.sys_roleaction))</code>
<code>{</code>
<code> </code><code>action.begintransation();</code>
<code> </code><code>action.delete(</code><code>"roleid='"</code> <code>+ roleid + </code><code>"'"</code><code>);</code>
<code> </code><code>dt.dynamicdata = action;</code><code>//传递数据链接</code>
<code> </code><code>dt.setstate(1);</code>
<code> </code><code>result = dt.acceptchanges(acceptop.insert);</code>
<code> </code><code>if</code> <code>(!result)</code>
<code> </code><code>{</code>
<code> </code><code>action.rollback();</code>
<code> </code><code>}</code>
<code> </code><code>action.endtransation();</code>
<code>} </code>
可以把maction或mproc对象传递给它,再执行事务,如此,就共用了一个链接了,启到同一个事务的作用。
mdatatable 在此框架中,像一个关键的路由结点,相当重要,轻轻了解,用好它,你的开发旅程会变的很轻松。
本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/p/5618048.html