关于Hibernate实体操作方法的设计

1. Hibernate的实体操作在设计的时候,比较提倡使用DAO模式。但是很多时候都会因为DAO过多,而引起混乱。所以有一段时间我又开始将实体操作写到了实体类里面,虽然从设计理论上大家都不提倡这样的做法,但是我也没有找到一个这样不好的理由。必竟简单也是设计的一个重要的标准。所以我还是继续使用了这样的设计。
比较一下两种方式:
1. DAO方式。
UserDAO dao = (UserDAO)DAOManager.createUserDAO();
User user = dao.load(1);
2. 直接封装的方式:
User user = new User(1);
user.load(); //如果适用Lazy_loading这一句都可以不用了。

看上去第二种方式好像更简单一点。但是在用的时候发现了一个问题。比如:
User user = new User(1);
user.load();
User user2 = new User(1);
user2.load();
这样就会引起Hibernate的访问错误,意思就一个ID已经与另外一个实例关联了。所以user2不能加载。
当时看见这个错误的时候很不理解,但是后来一想这也是正确的。为什么呢?user1,user2都是ID为1的实体,也就是他们本来就是一个对象,如果可能同时通过user2,user操作。这像必定引起同步,锁之类的问题。


2. 在实用Hibernate后,尽量使用load方式创建对象。

1. new 是面象对象开发的基本,但是至从设计模式的提出就开始建议在开发的时候少使用new,而且工厂模式代替,曾经一时迷恋设计模式,在略懂皮毛的时候大量使用了工厂模式,后来才现也没有什么好处,只是换了一个地方new而已。由于使用框架的时间多了,自己的设计少了,也就没有去关心怎么new的问题,在设计实体的操作的时候,我很喜欢new,load的方式,认为这是最容易理解的使用方式。后来用了Hibernate过后发现经常new的对象不能load,才开始渐渐的意识到,少用new不只是为了扩展的需要。也是为了真实刻化客观实体的需要。翻了一下书的确都是强调的为了灵活扩展系统,所以使用框架、IOC、AOP。都没有说过这是抽象描述的需要。经过2年的领误才算明白为什么要少用new.多用create.

2. 建议在设计的时候认真考虑一下new的方法。这会在后期的时候少很多麻烦。另外建议一下不要因为“可能”只需要一个Single模式就使用static定义方法。个人建议就算是Single模式也不要用static定义方法。别人怎么说不知道,反正我这样做,我就会少很多麻烦。

3.最后,IOC,AOP的确是不错的开发方法。不知道有多少炒作成份,事实上用了它真的可以让开发更简单。(在充分理解IOC,AOP的情况下) 如果没有真正有使用OO开发,或者使用OO开发的时候没有感觉到存在不方便,用IOC,AOP只会让开始变得非常复杂,最后是代码就会成了一堆无法连接起来的乱码。
(只是个人开发的感觉)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值