`
Tin
  • 浏览: 138599 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

从Domain开始看Springside

阅读更多

SpringSide是一个fantasy的好项目,可惜驽钝,没能加入其中,有时会看看它的代码,吸取一些养分。
http://www.springside.org.cn/

今天先看看Springside的bookstore的domain设计,这不是springside的重点,先看看。
从hbm看起,在springside-bookstore/src/org.springside.bookstore.commons.domain.hbm下面放着这些hbm。
在Order.hbm.xml里面可以看到一个list映射。list映射可以按照顺序持久化one-to-many关系。使用了<composite-element>映射后OrderItem就没有单独的class声明了,完全以一种组件的形式被映射到Order里面。
有序的List映射是很方便的,这样就可以通过List的set(int, Object)来改变OrderItem的顺序,这个需求是经常被提起的。
Order.java里面可以看到在价格计算上使用了Rule,Rule是用String纪录的rule id,我记得springside团队试验性的使用了Drools,具体在进步研究后分析。
Order实现了AclDomainAware接口,可见是用ACL进行了访问控制。没有继承自统一的DomainObject基类,这个不知从何考虑,感觉Domain继承自统一基类在框架很多地方都可以得到便利。实现接口在这里应该作为一种签名标示,作为某些环节或者拦截器使用。SpringSide这里应该是用的是Acegi,可以看到这个是差沙同学实现的。
Order这部分就没有什么其它特别之处了,是比较典型的pojo,贫血模型:D。在这里没有看到全功能DomainModel的影子。此时修改Order里面的orderItems就需要手动替换,addProduct的功能都不在这里,的确有点不爽。
BTW:在Order.hbm.xml的配置里面可以看到上面有一行<import class="org.springside.bookstore.commons.domain.OrderItem"/>,不知道起什么作用,希望了解的朋友指点。
在Product.hbm.xml里面有一个继承映射:“每个类分层结构一张表(Table per class hierarchy)”的形式。
再进到Product.java里面,它实现了HistorizableEntity接口,而前者又继承自AuditableEntity。
从里面的注释上看HistorizableEntity作为Hibernate Event Listener的记号,对此接口的领域对象自动保存修改纪录,这个我找到代码在org.springside.core.commons.support.audit.HistoryEventListener里面。这个东西被配置到session上。从代码上看,这个东西用来记录这个商品的LifeCycle,不过代码还没有完成,不知道calvin同学会用什么方法得到user等信息(Hibernate Listener是单例,不能有状态信息)。这种方法在RoR里面有个_at和_on的后缀,可以自动完成修改时间等信息的持久化,不知道此处是否是要实现类似的功能。
Product里面有个@SearchableId、@SearchableProperty、@SearchableComponent的注释,这是compass的注释,这种暴露属性提供搜索的配置方式非常舒服,是对pojo进行搜索的好例子。compass对Lucene的包装是不错的,这里好像是hellboys同学写的,有时间深入看一下。
限制描述字段的功能放到了pojo里面,这个方法很不错,大家也都在用。
Product的toString方法使用的是ToStringBuilder.reflectionToString,这个不知大家是否常用,不过这个东西大家要主要。比如在Domain公用基类中就不要用,否则它会对所有lazy load的属性有毁灭性打击:D。Springside没有使用这种结构,当然没关系。
Book是Product的子类,继承是OO特性,这里显然考虑周到,Springside也就不是仅能卖书的应用了:D。equals、hashCode方法都出现了重复。不过,重构强调任何形式的重复都是邪恶的,RoR的Hansson坚信之,所以有了CoC概念。
不过这里产生一个问题,我实现的一些应用中发现对于Hibernate的继承,类型转换是个令人头疼的问题,相当不舒服,因为descrimitor对于你是不可见的,你很难在保留id的情况下强行转换一个子类到另一个子类。这点很不灵活,不知大家有什么好办法?
Custemer、Category是单纯的Pojo。Category没有实现层次,这点比较失望,感觉应该做一个树形结构的显示管理的demo。

下面的部分,我会继续分析:D

分享到:
评论

相关推荐

    SpringSide4 参考手册

    还提到了如何在Ehcache中实现集群支持,以及Ehcache从2.x版本开始的一些变化。 此外,SpringSide还支持Memcached这种分布式内存对象缓存系统,提供了SpyMemcached、以及JVM中的嵌入式Memcached模拟器。Shiro ...

    springside-3.2.2源码

    《SpringSide 3.2.2 源码解析与技术深度探讨》 SpringSide 是一个基于 Spring Framework 的 Java 开发工具集,旨在简化 Spring 应用程序的开发过程,提供一套快速、现代且规范的开发实践。SpringSide 3.2.2 版本是...

    springside开发全面讲解

    总的来说,《springside开发全面讲解》资料将涵盖springside的所有重要方面,从基础到高级,从理论到实践,旨在培养开发者对springside的全面掌握,无论你是初学者还是经验丰富的开发者,都能从中受益匪浅。...

    Springside-core-4.1.0/Springside-core-4.1.0

    《SpringSide核心库4.1.0深度解析》 SpringSide是Java开发中的一款轻量级框架,它基于Spring框架,旨在简化企业级应用的开发流程。本文将深入探讨SpringSide-core-4.1.0的核心特性,以及其在实际项目中的应用。 一...

    springside3.0.zip

    《SpringSide 3.0:Java企业开发的高效框架指南》 SpringSide 3.0 是一个基于Spring框架的开源项目,旨在为Java开发者提供一套高效、简洁的开发规范和工具集。它不仅包含了Spring的核心模块,还整合了其他优秀的...

    springside

    《SpringSide:全面解析与应用》 SpringSide项目是一个基于Java的开源软件开发框架,它以Spring Framework为核心,旨在提供一套简洁、规范的项目构建和开发实践。在深入理解SpringSide之前,我们首先需要了解Spring...

    SpringSide3.3.4安装部署

    在开始安装部署 SpringSide3.3.4 之前,我们需要准备好相应的环境和工具。首先,我们需要安装 Java Development Kit(JDK),因为 SpringSide3.3.4 需要运行在 Java 平台上。其次,我们需要安装 Maven 工具,因为 ...

    有springside4.2.3-GA.jar 包

    《深入解析springside4.2.3-GA.jar:Java开发者的宝藏库》 在Java开发领域,SpringSide框架以其高效、灵活和强大的特性深受开发者喜爱。本文将围绕springside4.2.3-GA.jar这个核心组件,探讨其在Java应用中的重要...

    springside-core-4.2.2.GA(含关联的test.jar)

    pom.xml配置 ...mvn install:install-file -DgroupId=org.springside -DartifactId=springside-core -Dversion=4.2.2.GA -Dfile=./springside-core-4.2.2.GA.jar -Dpackaging=jar -DgeneratePom=true

    springside3.3.4 使用方法

    ### springside3.3.4使用方法与SSH整合详解 #### 一、Springside简介 Springside项目是基于Spring框架的一个应用架构示例,它提供了一套完整的开发模式来构建企业级Java Web应用程序。Springside 3.3.4版本作为一...

    SpringSide文档.chm

    SpringSide文档.chm。

    springside.jar

    从项目构建、测试到功能实现,springside.jar都为Java开发者提供了高效、规范的解决方案。在实际开发中,合理利用springside.jar,不仅能提升开发效率,还能保证代码质量和项目稳定性。因此,理解和掌握springside....

    springside4(showcase)

    《SpringSide 4:Spring MVC 实战展示》 在IT领域,SpringSide 4是一个备受推崇的开源项目,它是一个全面展示Spring框架及其生态系统的实战示例。标题"Springside4 (showcase)"暗示了这是一个以展示SpringSide 4...

    springside的jar包

    springside是一个开源的Java开发工具集,它为Spring框架提供了额外的支持和便利,使得开发者在基于Spring构建项目时能够更加高效和规范。这个"springside4-4.1.0.GA"的jar包是Springside项目的4.1.0版本的发布,GA...

    springside框架

    《SpringSide框架详解:整合Spring、Hibernate与Struts2的高效解决方案》 SpringSide框架,作为一款基于Java的开源企业级应用开发框架,是开发者们为了简化开发流程、提高开发效率而精心设计的。它巧妙地融合了...

    springside3.3完整版

    《SpringSide 3.3 完整版:深入解析与实战指南》 SpringSide 是一个开源的Java项目,旨在提供一套简洁、规范的Spring应用开发模板,帮助开发者快速上手Spring框架。本版本,即“springside3.3”,是专为MyEclipse...

    springside-4.0.0.GA.zip

    《SpringSide 4.0.0.GA:JavaEE世界的春天之光》 SpringSide,一个以Spring Framework为核心,秉持Pragmatic编程理念的JavaEE应用参考实例,它旨在为开发者提供主流技术选型的示范,展示JavaEE世界中的最佳实践。这...

    maven+springside 开发入门

    4. 最后,参考`springside+maven(入门).doc`,这是一个针对初学者的Maven和Springside入门教程,将指导你从零开始搭建和运行一个简单的项目。 在学习过程中,不断实践是关键,通过创建自己的项目并应用所学知识,你...

    springside3文档资料收录

    《SpringSide3:全方位探索Java开发的利器》 SpringSide3是Java开发领域的一个重要参考资料,它是由知名开发者Calvin创建并维护的项目,旨在为Java开发者提供一套完整的Spring框架学习与实践指南。SpringSide3不仅...

    Springside4 学习整理

    【Springside4 学习整理】 Springside4 是一个基于 JavaEE 平台的开源项目,它围绕 Spring Framework 构建,旨在提供实用的示例和最佳实践。Springside4 不是一个完整的框架,而是一个架构示例,帮助开发者理解和...

Global site tag (gtag.js) - Google Analytics