10.2 实现Hibernate持久化类
本系统打算使用贫血模型定义Domain Object,系统Domain``Object类就是持久化类,这些持久化类仅仅为各属性提供必需的setter和getter方法,并未包含业务逻辑方法。所有的业务逻辑方法都由业务逻辑组件提供实现。
10.2.1 设计Domain Object
本系统的开发并未完全按OOA、OOD的过程进行,而是采用了传统的信息化系统开发过程,先设计系统的数据库。因此在系统建模期间,已经得到了系统的E/R图,根据E/R图可以创建数据库的表,数据库表结构建立以后,可以根据表结构编写持久化对象。
虽然这个过程并不完全符合面向对象的设计过程,但因为数据库的建立对于企业信息应用非常重要,往往难以放弃分析系统的E/R关系图,因此E/R图的建立也是非常基础的部分。实际上E/R图也可用于辅助设计Domain Object。
本系统一共有如下5个Domain Object对象。
| 对象 | 描述 | 
|---|---|
AuctionUser | 
对应注册用户,包括用户名、密码、Email地址等信息。 | 
Kind | 
对应物品种类,包括种类名、种类描述等信息。 | 
State | 
对应物品的状态信息,包含状态名等信息。 | 
Item | 
对应物品,包含物品名、物品描述、物品备注、物品种类、物品状态等信息。 | 
Bid | 
对应竞价信息,包含竞价物品、参与竞价的用户、竞价价格等信息。 | 
不仅如此,5个Domain Object之间的关联关系也比较多,它们之间存在着如下关联关系。
AuctionUser(用户)与Item(物品)之间存在两种关系:所有者关系和赢取者关系。这两种关系都是1对N的关系,即AuctionUser可以访问他所赢取的全部物品,也可以访问他所拥有的全部物品,因为AuctionUser通过Set类型的变量来分别保存他的赢取物品和所有物品。而Item里则保存AuctionUser的变量,分别是它对应的所有者和赢取者。Kind(物品种类)和Item(物品)之间存在1对N的关系,Kind里以Set类型属性保存该种类下的全部物品,Item里以Kind类型属性保存它所在的种类。
State(物品状态信息)和Item(物品)之间存在1对N的关系,State以Set类型属性保存该状态下的全部物品,Item以State类型属性保存它所处的状态。
Item(物品)和Bid(竞价信息)之间存在1对N的关系,Item以Set类型属性保存该物品的全部竞价,Bid以Item类型属性保存它对应的物品。
AuctionUser(用户)和Bid(竞价信息)之间也存在1对N的关系,AuctionUser以Set类型属性保存该用户参与的全部竞价,Bid以User类型属性保存参与竞价的用户。
图10.8显示了5个实体之间的关联关系。