论坛首页 Java企业应用论坛

一个自制持久层的方法

浏览 14279 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-08-27  
引用
这类轻量级的容器出现会改变我们很多编码的习惯和方式

影响有好的也有不好的。
好的, 比如推广了ioc。但是,其实即使没有这些容器,如果你按照面向接口的原则编程的话,你的设计也必然是ioc的。
这些容器不过就是给ioc做了一个广告。

但是有些影响是不好的。比如只能用setter注射, 只能用构造函数注射等。这些完全是没有根据的,容器对组件的不恰当的干涉。
好在据说spring/pico都在改进,都支持了setter/构造函数/工厂等构造方式。
但是,实际上我认为这还不够。一个真正完全不干涉组件自由的容器,是应该允许组件以任何一种即使你认为是匪夷所思的方式注射实现的。
我觉得应该给组件提供一个可选的adapter接口,就象ant那样,让组件有自由有选择地实现这个接口来做更自由的组件创建和依赖注射。
多数组件用构造函数/工厂就够了,但是也不排除变态的程序员用变态的方法构造和注射。

这只是理论上的,当然实际上也许这三种注射方式就够用了。(当然前提是允许这三种方式混合使用)
0 请登录后投票
   发表时间:2004-08-30  
ajoo 写道
Readonly 写道
这个做法是偶上个月刚刚学会的常识:
Template Method + Callback Interface

用Spring吧, 它封装的JDBC代码比偶们Home Build的优雅多了......

gof上的template method?依赖继承和override的template method?别恶心我了。
老早就想写这么个东西介绍一下,以前曾经在jdon上介绍了一下,没人响应。大概jdon上的高手都是用ejb的,不会这么土自己砍柴烧火。
不过要是我在上个月之前贴出来,你是否又要骂偶异端了?


不是gof, 是偶几个月前复习Thinking In Java的时候, 看到用interface和inner class做Closures & Callbacks, 当时没有想到实际用处, 后来上个月看Spring的封装JDBC代码时候, 才恍然大误, 原来这个东东用处还真不少. 

ps, 这篇帖子应该移动到Java板块比较合适吧?
0 请登录后投票
   发表时间:2004-10-24  
凤舞凰扬 写道

    另外,我对于对象的生命期进行了判断,也就是采用logVersion,时间戳的方式,每创建一个实体对象,就会产生一个记录戳号,每从数据库读取一个对象,就会把最新的记录戳读取。所以当插入数据库的时候,就会和数据库的记录戳(也可以不采用数据库的方式存放记录戳)进行对比。当大于,如果数据库记录戳为0,则是新增,小于,则是脏数据(别人更新了)。
。。。。
       最后,给大家看看配置文件(在附件中)
   事务的管理在delegate层的实现进行封装。
   实现中用了oscache,对性能进行了简单的测试,还凑合。
   另外做了一个封装简单条件逻辑的(支持并、或、以及基本的逻辑门),可以让web端的条件输入与数据库的实现相脱离(至少不必在web层次低级的传入SQL条件了)。
   DAO框架和事务我看了一下,对现今的ORM都可以进行封装。
   给程序员们用了,反正感觉比ibatis好,呵呵。
   不过也要不少地方无法处理,第一就是关系映射(没有实现它,只能算OM,不能算ORM的),想做一对多,但是总没有找到好思路(其实也完全没有必要,这毕竟只是一个过渡的组件)。第二就是复杂查询(包括函数以及其他),第三就是处理的性能(像将字符串转换为对象并赋值全部是自己通过反射做的,居然没有用到java.beans的PropertyEditor,实在是失败),第四就是并发问题,对于并发的编程,经验不算很够,虽然用optimeziter进行了几次测试,不过感觉还远远不够。
    本来很想作为一个开源的东东,和大家交流交流,不过,呵呵,怕拿不出来,丢丑就不好意思了。今天借ajoo的话题,顺便贴出了点,大家聊聊。

所有的数据库都支持记录戳吗?
还是给所有的数据库表都加上一个字段?
其实,处理并发性而不锁定数据,可以采用开放式并发的方法。
.net的并发处理就是开放式并发。
所谓开放式并发,就是保留原始数据,更新或删除的时候,与原始数据比较。
Delete from tb where col1=OldCol1 and col2=oldCol2 and .....
考虑到空值,实际的sql语句要比这个复杂一些。
如果更新纪录的数量为零,则抛出一个并发异常。。。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics