系统使用Hibernate, 感觉还可以. 从其强大的功能中获利不少. 于是hibernate 3.1出来后, 就升级到了这个版本. 但是新版本的一个Event机制, 却透露出其设计的一个大毛病.
在hibernate 3.1中, 所有的操作都是由Event来驱动的. 于是就存在了各种各样的EventListener. 按照设计原理, 既然是EventListener, 而且可配置, 那么就可以去掉默认的实现, 不配置任何的Listener, 还是可以运行的. 但是Hibernate没有做到这点. 例如其DefaultLoadEventListener就实现了其特别的逻辑. 如果没有该Listener, Hibernate是无法load数据的.
这基本违背了最简单的设计原则. 我希望是我还没有完全理解hibernate, 可能有其他可配置的选择.
还有一个问题, 也是比较令人难受的. 那就是在默认的Listener的实现中记录日志. 比如DefaultLoadEventListener 的onLoad方法, 如果没有数据存在就忘日志里写了如下的信息.
catch(HibernateException e) {
log.info("Error performing load command", e);
throw e;
}
这就强制用户接收这些日志信息了. 很多时候, 我们使用该方法来验证数据是否存在, 结果会看到一大串的异常信息, 很不舒服.
从这两点看来, 其设计的思想还是没有从用户的角度来考虑呀.
在hibernate 3.1中, 所有的操作都是由Event来驱动的. 于是就存在了各种各样的EventListener. 按照设计原理, 既然是EventListener, 而且可配置, 那么就可以去掉默认的实现, 不配置任何的Listener, 还是可以运行的. 但是Hibernate没有做到这点. 例如其DefaultLoadEventListener就实现了其特别的逻辑. 如果没有该Listener, Hibernate是无法load数据的.
这基本违背了最简单的设计原则. 我希望是我还没有完全理解hibernate, 可能有其他可配置的选择.
还有一个问题, 也是比较令人难受的. 那就是在默认的Listener的实现中记录日志. 比如DefaultLoadEventListener 的onLoad方法, 如果没有数据存在就忘日志里写了如下的信息.
catch(HibernateException e) {
log.info("Error performing load command", e);
throw e;
}
这就强制用户接收这些日志信息了. 很多时候, 我们使用该方法来验证数据是否存在, 结果会看到一大串的异常信息, 很不舒服.
从这两点看来, 其设计的思想还是没有从用户的角度来考虑呀.