随笔-19  评论-187  文章-2  trackbacks-8

从部队转业到地方,转眼已经快3年了。回首3年里,比较欣慰的是我的框架已经逐渐成熟了,把在部队里的想法已经慢慢的实现了。
由于部队是个相对封闭的环境,主要是靠自己对技术方向的把握。转业之后没有选择在上海当公务员,靠着自己对于计算机的热爱,选择了走计算机技术的道路,去实现自己的梦想。

可能是我接触的环境的原因,我呆的公司都是比较小的公司,小公司在技术方面的实力通常都是相对比较弱的,再加上国内的急功近利的一贯作风,多数小公司在技术上没有多少的沉淀,也可能是我的目光太短浅。中间的言论也可能有不妥之处,请大家能够见谅。

从我开始整理这个框架,就走上了创新的道路,可能大家在别的地方也可能看见过相似的解决方案,那纯属巧合。

废话少说,从今天开始慢慢的介绍自己的框架。

框架从层次结构上分主要分为:ORM层、Meta层、BO层、SO层、数据交换层、DTO层、服务层、代理层、外观层,这几大层。
ORM层:主要提供,存储过程、配置文件的翻译,实现数据库与实体数据的映射。由框架提供。
Meta层:主要提供,数据库与对象的映射,由工具生成,在98%的应用场合不用更改
BO层:业务逻辑层,核心的业务逻辑,基本关联已经由工具生成,可以在此层处理特定业务逻辑,如果涉及分布式数据访问,需要在此进行稍加改动。对于关联结构、主从结构要在此加上关联处理,重写OnBeforeAdded/onAfterAdded/等。加入特定业务。建议通用查询/配置过程的处理,在这里重写一下,不要以ActionId对外开放。(在Demo里面没有给出通用查询/配置过程的处理,类似于Ibatis的配置文件)
SO层:业务外观层,主要是与客户端打交道,提供客户端所需要的数据。SO层与DTO和数据交换相互配合,传输客户端需要的数据。提供声明性事务、声明性服务。工具根据BO业务层生成SO层代码。
数据交换层:实现DTO层与BO层的数据交换,实现客户端的数据与业务数据的连接。工具生成基本代码。
服务层:根据BO生成的配置文件,提供基于Http信道的服务。(可以提供TCPIP等其他信道)主要服务主框架提供,需要在此配置基本连接字符串,设置配置文件的路径等。
代理层:由工具生成,配置文件根据服务生成。
外观层:当前只提供CS的界面生成,BS界面下一步加入。主要提供了列表的配置、列表界面、明细界面的生成,对于主从、关联结构的自动触发机制。客户端生成代码的质量非常高,基本应用的改动很小。

下面把每一部分的代码一一介绍

posted on 2007-12-11 22:39 光影传说 阅读(3803) 评论(38)  编辑 收藏

评论:
#1楼  2007-12-11 22:48 | Nathan2008      
支持!!

  回复  引用  查看    
#2楼  2007-12-12 08:31 | xhouse [未注册用户]
一个应用中如果包括了类如你说的那么多的层次,嘿嘿,也真够复杂的了。
我们拭目以待有关于产品效率方面的结果。
另外,个人觉得多些小公司多数做一些短频快的东西,你的这个很多层的东西他们愿意接受吗?
  回复  引用    
#3楼  2007-12-12 08:35 | 无忧浪子      
感觉这样对于小公司小项目来说,增加了系统开发的复杂度.也很期待相关产品信息以及相关效率测试数据.
  回复  引用  查看    
#4楼  2007-12-12 08:47 | xmanx [未注册用户]
可以参考
http://www.cnblogs.com/mail-ricklee
中的FortuneBase
  回复  引用    
#5楼  2007-12-12 09:06 | 编写人生      
成功来自积累
  回复  引用  查看    
#6楼  2007-12-12 09:07 | oxsoft.cn [未注册用户]
有代码才是关键...
  回复  引用    
#7楼 [楼主] 2007-12-12 09:21 | 光影传说      
@xhouse
如果业务很简单,而且不需要CS客户端的,可以去掉中间的好几个层次。
另外虽然代码很多,但是需要人工写的代码倒是很少,主要是把层次、关系理清楚就好了。
  回复  引用  查看    
#8楼  2007-12-12 09:24 | dali [未注册用户]
层次过多很难修改, 简单适于变化才是王道
  回复  引用    
#9楼  2007-12-12 09:28 | Allen wu      
不错,支持!
  回复  引用  查看    
#10楼 [楼主] 2007-12-12 09:28 | 光影传说      
@无忧浪子
产品的复杂度是增加了,却降低了产品开发的难度,中间有几个层次是不用写代码的。
代理层:代码全部是生成的,如果WS的话,也要生成代理的。
服务层:只要一个配置文件和几行代码
Meta层:生成的代码几乎不改动
ORM层:低层框架提供,不用改动。

对于性能来说,单机性能高不能代表多机性能高。直接写存储过程的效率是最高的,但是扩展性和伸缩性也是最差的。对于通常项目来说,成功率、稳定性、扩展性、伸缩性我感觉要大于单机的性能。现在服务器很便宜。
  回复  引用  查看    
#11楼 [楼主] 2007-12-12 09:31 | 光影传说      
@dali
是的,设计就是要为了变化。框架的刚开始没有那么多的层次的,后来在项目中是没有办法,只有加上去了。
对于复杂一点的业务系统,我们的代码更改可能是比较少的了。而且修改起来简单、快速,关键是故障点不会扩散。
  回复  引用  查看    
#12楼  2007-12-12 09:32 | 周银辉      
愿闻其详:)
  回复  引用  查看    
#13楼  2007-12-12 09:34 | BlackCat      
mark
  回复  引用  查看    
#14楼  2007-12-12 09:38 | 真水无香1981 [未注册用户]
非常不错~~~支持
  回复  引用    
#15楼  2007-12-12 09:44 | 预备役中尉      
向老班长问好!班长辛苦了!
  回复  引用  查看    
#16楼  2007-12-12 10:18 | jillzhang      
层数太多!
  回复  引用  查看    
#17楼  2007-12-12 10:29 | Ray Zhang [未注册用户]
不知道博客园里除了我们俩还有谁是转业的。
  回复  引用    
#18楼  2007-12-12 10:34 | xc#      
等待
  回复  引用  查看    
#19楼 [楼主] 2007-12-12 10:53 | 光影传说      
@jillzhang
层次好像有点多,Meta和ORM配合算是数据访问层吧。方便、灵活、性能您可以跟NHibnate和IBATIS比较一下,如果再和业务逻辑层(BO)层联系起来,您可能会发现,自己写的代码很少,而且处理复杂的业务逻辑是非常的方便与灵活,特别是涉及到关联、主从、多级结构的时候。工作量可能比用NHibnate和Ibatis都要方便、灵活。BO层应该是我这个框架的灵活的地方。

加了DTO层,好像是多了,但是他跟CS客户端的绑定处理,会方便了很多,客户端的代码会大大减少,人为错误方面很大大减少。可能这方面的工作量会大大降低了。

如果说层次太多,可以只用ORM映射层和BO层。对于简单BS应用,这两个层次已经足够了。不用考虑系统集成、数据分布方面。
  回复  引用  查看    
#20楼  2007-12-12 11:38 | 人非木      
学习学习

  回复  引用  查看    
#21楼  2007-12-12 12:13 | 读书人 [未注册用户]
这么多层,恐怕很难应用到具体项目中去!对于分层,需要权衡一下,并不是越多越好!
  回复  引用    
#22楼  2007-12-12 13:07 | 文晨曦      
期待ing

  回复  引用  查看    
#23楼  2007-12-12 13:41 | 夕颜 [未注册用户]
关注 希望你能写出很好的介绍
  回复  引用    
#24楼  2007-12-12 19:15 | aaa2000 [未注册用户]
能不能与EJB对比一下?
  回复  引用    
#25楼 [楼主] 2007-12-12 19:57 | 光影传说      
@读书人
分层当然不是越多越好,还要无缝的衔接在一起,要成为一个系统工程,那才行,每一层都要发挥那一层存在的效果。
另外,我的框架是应用的结果,每实施过一个项目,都会完善一次。这一次进步比较大一点。同一个项目,原来3个人花了3个月,现在是2个人花了3个星期的时间完成了,特别是客户端的工作量是大大降低了。如果没有框架的支持,工作量、人为错误可能要高了很多。

  回复  引用  查看    
#26楼 [楼主] 2007-12-12 20:01 | 光影传说      
@Ray Zhang
部队转业的人还在搞这些的,人可能不多。多数都去当公务员了,哪有几个像我这么执着的?
  回复  引用  查看    
#27楼 [楼主] 2007-12-12 20:06 | 光影传说      
@aaa2000
跟Ejb相比,可能不在一层面的,不好作对比。
ORM倒是可以跟NHibnate和IBatis相比,我的一个小兄弟,原来学过IBatis,他是感觉我们的ORM比那个要好用,特别是跟BO层结合起来,夸张点说可能不在一个数量级的。
  回复  引用  查看    
#28楼  2007-12-12 21:06 | kiler      
对楼主框架的数据交换层,服务层,外观层比较感兴趣,期待楼主讲一下思路。
  回复  引用  查看    
#29楼 [楼主] 2007-12-13 09:18 | 光影传说      
@kiler
对于数据交换层,就是把DTO的数据与业务层的数据进行双向交换,格式整理,因为DTO的对象数据包含历史数据,而业务层数据不包含历史数据。DTO的数据支持数据绑定、触发,包括主级结构的自动触发,但是业务层的数据不支持。所以要进行数据交换,其实在Java的SDO里面也是一样的思想,SDO的数据、DataTable的数据都包含当前数据、历史数据,业务数据层都要重新整理的。由于我的清楚的BO层的存在,所以要进行数据交换。还有重要的一点是为了系统的集成考虑,业务逻辑层与服务层完全分离。
对于外观层,其他就是自动生成界面,由于有了DTO层数据的支持,客户端的处理思想是全是基于数据绑定处理的。所以代码量大大减少。
对于服务层,类似于WebService,只不过我走的是压缩的二进制罢了,下一步会在不改动SO层代码的情况下能够提供WS服务。在服务层只要生成的配置文件,一个接入点。不需要WS的.asmx文件了。

汇报完毕

  回复  引用  查看    
#30楼  2007-12-13 09:33 | 凌风      
不管层多与层少,不管大公司与小公司,要有自己的思想才是最重要的。技术很重要,切勿沉迷于技术。
  回复  引用  查看    
#31楼 [楼主] 2007-12-13 10:01 | 光影传说      
@凌风
谢谢兄弟提醒,以后我会注意的。
可能就是因为我们公司小,才加入了那么多的东西,想把有限的人用到刀刃上去,把人的精力都放在业务上。
现在人工写的代码量跟刚开始已经不在一个层次上了,是大大的降低了。只要设计出来之后,基本的代码就会出来了,而且是马上可以运行的。
我的基本思想是想降低开发成本和提高开发质量,降低人为Bug。这是我设计的根本目的。而且框架在我们的项目中已经应用,在开发进度、程序的稳定性、Bug数量等方面已经得到了验证。
  回复  引用  查看    
#32楼  2007-12-13 10:59 | pwqzc [未注册用户]
放弃做公务员的机会
来写code
不得不佩服楼主下!
祝福楼主成功!
  回复  引用    
#33楼  2007-12-13 13:28 | 一弯苍穹      
期待
  回复  引用  查看    
#34楼  2007-12-13 14:33 | kiler      
@光影传说
多谢点拨,看了你的解释了,我对于DTO存在意义有了新的认识,是不是可以这么考虑,正是因为有了DTO,所以你的客户端控件可以完完全全和DTO进行绑定在一起。
  回复  引用  查看    
#35楼 [楼主] 2007-12-13 15:21 | 光影传说      
@kiler
可以这么说,Java的SDO存在的意义,我估计这也是一方面原因。实现展现数据与业务数据的分离。
  回复  引用  查看    
#36楼  2007-12-13 15:38 | Mic [未注册用户]
战友俺也出来三年多了,做这行不易呀。用着脑里的看着书本上的,呵呵呵...
别沉淀于技术,你还没写好微软就帮你整理好送给你了。
  回复  引用    
#37楼  2007-12-14 09:40 | 小鬼00 [未注册用户]
呵呵.强.
不知道楼主有没有兴趣介绍一下自己目前的开发流程.
  回复  引用    
#38楼  2008-07-13 14:38 | 不太懂的人 [未注册用户]
你的DTO层 怎么没有说明啊 如果同时登陆的人数过多 需要排队系统 那是要放入哪里呢? 不太明白了```你的缓存过程跟映射数据库的放到一起吗? 不要分开来重载吗?
  回复  引用    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-12-11 22:43 编辑过


相关链接: