到目前为止,albian的ORM开发工作基本上那算是告一个段落了。下面的就是测试和完善。经过测试以后,我会写一篇怎么使用albian的orm完成基本的数据库增删改查工作,并且加上数据库路由功能等等。当然对于一些未经历过系统架构的XT,偶也会增加一些系统架构的示意图,当然主要还是围绕着albian的ORM和数据库路由功能展开。

在这一阶段的开发过程中,和往常一样,还是碰到了一些问题。

1. 在以往的开发中,泛型是我们非常喜欢的代码增强。但是对于albian而言,就泛型碰到了一些使用上的失误。albian的数据对象都是直接或者间接派生于IAlbianObject接口,而对于albian orm托管的数据对象,我们提供了数据库路由功能。数据库的路由分为2类,一类是路由到“指定”数据库,另外一类当然是路由到“指定”表了。路由数据库功能由配置决定,而路由表则由程序员提供路由算法(别担心,这个算法很简单的,只是需要根据你的业务实现,故无法有albian原生提供),而注册这个算法的时候,就是用了泛型,但是往往当我们往数据库save数据时,至少save两个object,一个是原生数据,另外一个是日志。所以我们在使用Save<T>方法时T一般都会指定是IAlbianObject。但是我们在读取是,一般读取的都是一个对象,故可以指定对象的具体类型,比如User。而albian的表路由算法是保存在一个hashtable中的,key是typefullname+routingName,这样问题就来了,注册的时候typename是IAlbianObject,而读取的时候是User,自然无法取到了。不是没有想到使用参数传入一个typefullname,当时想的是既然已经用了泛型,为什么不能使用泛型一下子搞定呢?思前想后最后还是无法得出使用泛型的解决方案。最好一火之下更改了表路由功能的全部代码,取消泛型,取而代之的是使用IAlbianObject为参数类型,增加参数typefullname参数。这样的后果就是无法对没有被IAlbianObject签名的对象进行表路由。其实真正解决数据路由的最好办法就是提供原生态的数据路由,完全脱离App,但是对于现在的主流数据库(Oracle,MySql,SqlServer),除了mysql协议完全开放之外,别的好像都很难开发;

2.Albian Service的Id问题。用过spring或者spring.net的都有体会吧,配置注册对象时,一般都要提供这个对象的ID,在app中需要取得对象时需要传入一个id,然后由ioc容器根据id返回app需要的对象。这些本身没有错,在开始设计albian的ioc时也是这么干的,但是后来发现为什么要配置id呢?不是有interface吗?直接使用interface就可以确定一个service了,遂改掉。去掉id,一切为了简单。但是在设计albian  orm缓存时碰到了问题:用分布式缓存?还是本地缓存?还是两者皆用?最灵活的方式当然是两者兼用。而albian提供的缓存接口是同一个,所以碰到了同一个接口有两个类实现的service,用interface肯定是不行了。所以又改回来,但是为了程序的简单,当一个接口的实现是一个类时,还是可以省略id。当然从这个事情上,albian还是认为为了以后的扩展方便,最好还是配置id;

3.mysql的字符支持问题。albian的orm支持主流的3中数据库,oracle,mysql,sqlserver。目前albian的开发工作实在mysql的环境下进行的。在第一轮测试的时候就碰到了mysql的字符集支持问题。不管你服务器端怎么调整,怎么读出不来中文。所有插入的中文全部被“?”替代了。饶头了半天,还是没有找到解决办法。只能上mysql的官方网站上找,在一个极其不起眼的地方找到了一个类似于“客户端也要配置字符集支持”的信息。好吧,加上charset=gb2312.等等,这样是有问题的。不知道是mysql net客户端的bug还是mysql服务器的bug,charset=gb2312是不假,但是必须在等号两边加上两个空格,需要配置成charset = gb2312.是不是very bt?不过这样一来,一切ok了!

4.还有一个缓存同步问题,这个问题将会在下面的一篇中作为一个主题来讲述。albian从一开始考虑支持缓存同步到最后放弃缓存同步功能虽然经历了很长很纠结的过程,但是最后的结果还是放弃之。《放弃缓存同步》这篇bolg更多的是为了以前的兄弟们所写的,当然里面会有一些主观的想法,不一定完全是对的。但是我希望将来有一天我能提供一个示例来证明我的观点。

转载于:https://www.cnblogs.com/Seapeak/archive/2011/07/19/2109964.html

albian开发笔记四相关推荐

  1. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨)    邮箱: happylifemxy@163.com 本篇文章里,我们首先对Direct3D之中固定功能流水线中的 ...

  2. 【Visual C++】游戏开发笔记四十六 浅墨DirectX教程十四 模板测试与镜面特效专场

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处.   文章链接: http://blog.csdn.net/zhmxy555/article/details/8632184 作者:毛星云( ...

  3. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩 纹理映射技术 二

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  4. 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8523341 作者:毛星云(浅墨 ...

  5. 【Visual C++】游戏开发笔记四十 浅墨DirectX教程之八 绘制真实质感的三维世界:光照与材质专场...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨)    邮箱: happylifemxy@163.com 本篇文章里,我们对Direct3D之中固定功能流水线中的3D ...

  6. 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器 DirectInput专场

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  7. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界 摄像机的实现

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...

  8. 【Visual C++】游戏开发笔记四十 浅墨DirectX教程之八 绘制真实质感的三维世界 光照与材质专场

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  9. 【Visual C++】游戏开发笔记四十二 浅墨DirectX教程之十 游戏输入控制利器:DirectInput专场...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8547531 作者:毛星云(浅墨) ...

  10. 【Visual C++】游戏开发笔记四十四 浅墨DirectX教程十二 网格模型和X文件使用面面观

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8586540 作者:毛星云(浅墨 ...

最新文章

  1. warning: implicit declaration of function ‘sleep’(添加头文件: #include <unistd.h>)
  2. art-template入门(一)之介绍
  3. 阿里重磅开源首款自研科学计算引擎Mars,揭秘超大规模科学计算
  4. Linux(CentOS6.5)下编译安装Nginx1.10.1
  5. python 3.5 format_Python3 format及字符串格式化
  6. truncate(can)
  7. C#热血传奇游戏服务端再次开源更新
  8. 【游戏】基于matlab绘制滚动点阵字幕(跑马灯)【含Matlab源码 911期】
  9. 灵悟礼品网上专卖店——画出项目的主要框架
  10. 为什么计算机不显示桌面工具栏,笔记本电脑开机后不显示桌面图标或任务栏怎么解决...
  11. 算法:并查集(四种方式)
  12. ecg信号越界_精确心电图ECG信号处理介绍
  13. 自制FOC控制驱动器
  14. 金融量化-对数收益率
  15. HTML标签---列表标签和表格标签
  16. 二十一世纪大学英语读写教程(第三册)学习笔记(原文)——2 - The Titanic Puzzle(泰坦尼克难题——女权主义者应该接受优先坐上救生艇吗)
  17. 项目管理文档_免费直播 | 项目管理模式“武装”质量管理体系
  18. win10利用Dism修复系统
  19. 测试工程师常用面试题
  20. STM32模拟GPS输出PPS、GPRMC与VLP16时钟同步

热门文章

  1. 哪些Mac快捷键可以精准定位光标位置
  2. IEEE VIS 2018专题
  3. 系统时间正常日志时间不正常
  4. Navicat for MySQL再谈之无奈之下还是去安装Navicat Premium
  5. 常用Docker 镜像命令(二)
  6. 函数可以作为Javascript对象(哈希表)的键吗
  7. cookie token 了解一下
  8. 如何查看mysql数据库中各个表的大小
  9. 【Notepad】Notepad++常用快捷键总结
  10. 真狠,为了干掉 HTTP ,Spring团队又开源nohttp了!