初学hibernate设计了一个系统的数据库大家批批是否合理 谢谢

05-11-14 youlika

这是一个基于B/S的学生在线评价教师的系统

evaluate_detalis表格是评价指标(例如:教学态度教学风格等等)

1、evaluate_process表格是学生首先从界面里面选择所在班级的任课教师和相应的课程的每一个指标对其进行评价(选择评价等级 优良中差)

2、evaluate_result表格存放的信息是 当学生评价完毕时管理员对该老师的课程进行结束评价的操作,系统自动计算出每一个评价指标的加权评价等级并将结果写到这个表格里面

大家看看是否合理,对于hibernate的映射有什么不妥吗

大家有什么需要小生再说明的请指出 万分感谢

    

1
banq
2005-11-16 15:55
首先我们必须明确,为什么使用Hibernate?我看很多人没有明白,包括一些专业的论坛,Hibernate是为了让我们更方便地以对象化思维来分析系统。

这句话怎么理解?这个意思里面有个纠正错误的隐含意思,纠正什么错误,为什么要强调以对象化思维来分析系统,难道我们以前不是用或者说不方便用对象化思维来分析系统吗?

是的,以前我们以数据库关系数据来分析系统,所以本例子就是一个明显实例。

那么以对象化和以数据库两种思维方式有什么区别呢?有本质的不同,这里暂时不谈很多理论知识,就以本例为说明。

首先,数据库逻辑图是平面的,而对象化(面向模型)分析设计是立体的,那么平面和立体有什么区别?因为是平面的,也就是所有的、无论大小的关系都会展现出来,最后关系复杂,阻碍我们抓住重点,妨碍进一步详细分析。

本图中evaluate_process几乎和所有表有关系,而evaluate_process又有自己的实体Data,所以,evaluate_process是个关系+实体的东西,使用数据库逻辑图表示出来,我们看出这个系统混乱,无从下手。

要使用好Hibernate,首先需要拿出类图 class diagram, 用类图四种关系(依赖 关联 继承 实现)来表示他们之间关系。在用UML类图表示后,evaluate_process会分分解,甚至不出现在类图中,而隐含在类关系中了,重而整个类图简洁,易于执行,再使用Hiberante进行对象到数据表的转换就水到渠成。

所以使用Hiberante的次序是:用对象化思路画好UML类图--->设计数据库--->配置Hibernate映射。

而本例只给出技术终端实现,没有很好地抓住源头和本质,必然会带来系统的失败,或者是体现在中间层DTO/VO的混乱上。

ValueObject和DTO模式的一些疑问

youlika
2005-11-17 23:03
谢谢版主指明方向 当时还是有一些不是很明白 譬如说那个evaluate_process怎么设计好呢 小弟是刚刚学这个 还望指点一二 躬了

youlika
2005-11-19 16:43
对不起 banq兄 那个data是笔误 应该是date 小弟初学 真的无从下手

实体关系我很清楚 就是这样的一个学生给老师的一门课来评价 涉及到三个实体的关系 而评价需要结合评价项目给每一个项目打分 这样就又涉及一个评价项目的实体 而打分的记录是需要持久化的 所以我现在要是从域模型下手的话 真的有些没有头绪 还是希望老哥能给一点启示 谢谢

banq
2005-11-21 12:37
我们使用域驱动方法来分析你这个案例。

首先,从用例use case分析开始,你的这个案例有三个角色:学生 老师和管理员。主要功能是:学生对老师的课程进行评价;管理员对老师的课程进行结案操作。主要是这两个功能。

现在,我们要通过域建模专家从你这个用例中提炼出域模型来,这个过程是一个经验过程,只有一些方法可借鉴,没有特定的技巧。主要一个模型是evaluate,这是用例中几个角色操作主要对象,而且evaluate

和课程class是有一定关系,因此,必须有一个模型class。

类图如下图:

这张类图就比你的数据库逻辑图清晰多了,而且抓住了我们操作的主要对象。

下面就是实现,如果使用Jdon框架实现就很简单,Jdon框架提供了域模型的增删改查CRUD操作,这个案例就是模型evalute的CRUD操作,学生给课程评价打分,实际是evalute的新增操作。你看主要一个功能我们就实现了。

当然,围绕evalute还有type类型 level等属性,这些属性是围绕evalute的关系图,通过对象的关联关系很容易实现(参考class与evalute的关联)。

我使用together绘制的上面类图,自动生成的代码如下:

banq161y4n4Xp1.rar

不知上述过程你是否明白?有不详细的地方可进一步交流。

猜你喜欢
7Go 1 2 3 4 ... 7 下一页