学籍管理系统的MDA的困惑(banq大哥必看,关于我们学校ecust的)

项目需求分析如下:
学生
---选课
---查看课程表
---上课
---查看考试表
---考试
---查成绩
---评教
---管理个人信息

教师
---授课
---输成绩
---管理个人信息
---查看所教学生的信息

教务处
---开课(根据各院上报的所开课程)
---确定学生的课程(筛选,专业计划)
---管理学生/教师信息

参考http://www.jdon.com/mda/mda.html的分析思路,建立如下模型:

Student
------------
id: int
name: String
pwd: String
......(部分省略)
courseTable: Collection(课程表,表示Student与Course的关系是1:n)
examTable: Collection(考试表)
scoreTable: Collection(成绩表)

Course
--------------------
id: int
name: String
classTimes: Collection(上课时间,表示Course与ClassTime的关系是1:n)
....

AbstractClassTime
---------------
startWeek: int(起始周)
endWeek: int(结束周)


ConcreteClassTime
-------------------
frequency: int (0:每周/1:单周/2:双周/....)
startNode: int(开始节)
endNode: int(结束节)


Exam
-----------------
course:Course
time: Date
place: String
type:String
....

Score
-----------------
course:Course
mark: int
credit: double
.......

不知以上设计怎么样?如果有错请赐教......

假如没错,问题来了,MDA带给我的困惑是:假如我还是要用到关系数据库做为持久化策略(目前还很难摆脱它),那么怎么去设计这个数据库schema呢?无从下手了......



[该贴被jesse于2008-05-24 19:28修改过]

既然不是改造遗留系统,从头开始是不需要设计DB的,当你建立了对象关系之后,完全可以使用hibernate等等的ddl auto来生成db,换句话说,当你设计一个新系统的时候,是不需要db概念的,你只需要OO关系。

我倒是想看看,生成的Schema是什么样的?你说说看?有这么简单吗?
对象和关系数据库天然阻抗 就通过一个Hibernate OR MAPPING就解决了?

你将Entity建立好,在JPA配置里定义<property name="hibernate.hbm2ddl.auto" value="update" />,自己看看如何生成db,不能连试都没试过就说不行或行,我试过之后认为自己定义的OO关系可以映射到db。

如果是从新开发新系统确实不要先考虑数据库表,因为通过正向工程,可以直接生成数据库schema,而你要是改造遗留系统,那么也可以通过反向工程又数据库schema生成类。

是的,以上回答很正确,设计阶段根本不要考虑数据库和schema,这些属于编程完成后部署阶段的事情,传统工程方法将数据库schema提前到设计,是不符合OO的,是不能建立一个灵活健壮的软件系统的,也是不符合软件发展方向的,是倒退,是delphi过去时代。

>我试过之后认为自己定义的OO关系可以映射到db。
通过Hibernate都可以实现,可以参考Jdon框架开发的struts+jdon+Hibernate,都是自动生成的。

假定持久层用的就是hibernate,要用什么工具自动生成?hbm2java,hbm2ddl都不能用了(说来好像有点讽刺,好像很多人都根据数据库自动生成映射文件/java源文件的,想想在MyEclipse中是如何用hibernate的!)
楼上说的ddl auto能给我个链接下载和教程?

假如持久层不用hibernate了,那又怎么办呢?

由IDE生成类明显就是为旧系统改造准备的功能,新系统是完全不需要的。不能因为IDE提供了这个功能,就认为它是正确的和必须使用的。难道忘了GUI代码的乱七八糟是怎么来的?不就是因为IDE太方便了么?
因为我用元数据映射,已经很久没用hbm了,下面给出JPA和hibernate里的配置:
JPA里通过定义persistence.xml文件中的:
<property name="hibernate.hbm2ddl.auto" value="update" />
Hibernate里通过配置hibernate.cfg.xml:
<property name="hibernate.hbm2ddl.auto">update</property>
以上配置后如果发现被定义了@Entity的类将会被此配置生成db。
即使不用Hibernate,其它符合JPA规范的都能够有相应的办法生成db。
不过目前这个功能不算很强,有些外键定义无法准确生成,但这并不影响使用这些对象和关系。关系是交给Hibernate维护的,不能交给DB管理。完全可以删除那些外键约束。
我感觉您是在关联关系的映射上遇到问题了,其实这很容易理解,n:1在db级别不正是被FK维护的需要连接抓取的SQL么?

`````