从BJUG的maillist里发掘一个我以前的旧帖出来,嘿嘿以前我和limo同志做过一个Hibernate技巧情色版....嘿嘿,这次发动大家收集一下J2SE 5和JSR 220里的改进design的tips.我下午试验JSR220的时候,找到几个1. Implement Moment-Interval and Moment-Interval-Details Using Iterable<T>例子, 比如Order和OrderItem,典型的一对多,一般我们这么做
在J2SE5里面,
就可以直接来处理,
从某种程度上利用enhanced for的语法,来简化语法。trade-off: 不适合多个details 聚合,适合于简单的moment-interval和moment-interval-details。2. Annotate Description with @Embeddable, and the Thing it describe with @Entity例子,Product和ProductDescription
在JSR220里,如果一个field是embeddable,而且对该field没有标注为@Transite,以及使用keyword transite,自动按Embedded处理,这一点是很方便的。这个基本没发现trade-off3. Avoid Database Primary Key in Domain Model Using @EmbeddableSuperclass例子,在hibernate里,总是要给Domain加一个primary key,非常的不爽.虽然也可以通过继承结构来避免,但是配置文件太多, JSR220里,通过自动处理的annotation ,可以节约很大的工作量。
这个大家就一目了然了4. Avoid Database Field in Domain Model Using @AttributeOverrideAnnotation虽然简化了开发,但是仍然有一个问题,就是修改mapping的时候需要修改代码,这个很不好,而且影射的时候需要在domain里硬编码fieldname,这个简直就是恶心,但是还是由办法避免的。
同样,通过继承来隔离技术和Domain,然后在子类里作部署相关的动作。然后把DomainModel和PersistentDomainModel 分包,针对DomainModel编程,就Ok了。这个时候Domain会异常的干净.....5. Model Place as Factory其实这个是一个通则,以前好像也讨论过。
基本上下午2个小时的成果就这么多,我是在尝试用JSR220 API代替以前我和limo写的那个珍珠商城订单部分得到的一些tips。总体而言,JSR220还是挺好的,我们可以很自然的运用一些模式和OO的手段还避免它的不足。同时上述做法在hibernate里也可以做,但是由于比较麻烦,大家一般还是做不到。JSR220里,正是通过它的毛病强迫我们这么做.....(汗),也算体现出约定了。