Dojo
最新
最佳
搜索
订阅
解道Jdon
架构设计
领域驱动
DDD介绍
DDD专辑
战略建模
领域语言UL
领域事件
商业分析
工作流BPM
规则引擎
架构师观点
数据工程
产品经理
系统思维
微服务
微服务介绍
微服务专辑
模块化设计
SOA
API设计
clean架构
SpringBoot
分布式事务
分布式架构
Kubernetes
DevOps
编程设计
GoF设计模式
模式专辑
面向对象
函数式编程
编程语言比较
编程工具比较
形式逻辑
前端编程
Reactive编程
Jdon框架
Rust语言
ChatGPT
Web3
模因梗
幽默梗
程序员吐槽
面试技巧
Java入门
数字化转型
认知偏差
道德经
GitHub工具
更多话题
学籍管理系统的MDA的困惑(banq大哥必看,关于我们学校ecust的)
08-05-24
jesse
项目需求分析如下:
学生
---选课
---查看课程表
---上课
---查看考试表
---考试
---查成绩
---评教
---管理个人信息
教师
---授课
---输成绩
---管理个人信息
---查看所教学生的信息
教务处
---开课(根据各院上报的所开课程)
---确定学生的课程(筛选,专业计划)
---管理学生/教师信息
参考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修改过]
freebox
2008-05-24 20:18
既然不是改造遗留系统,从头开始是不需要设计DB的,当你建立了对象关系之后,完全可以使用hibernate等等的ddl auto来生成db,换句话说,当你设计一个新系统的时候,是不需要db概念的,你只需要OO关系。
jesse
2008-05-25 11:39
我倒是想看看,生成的Schema是什么样的?你说说看?有这么简单吗?
对象和关系数据库天然阻抗 就通过一个Hibernate OR MAPPING就解决了?
freebox
2008-05-25 15:11
你将Entity建立好,在JPA配置里定义<property name="hibernate.hbm2ddl.auto" value="update" />,自己看看如何生成db,不能连试都没试过就说不行或行,我试过之后认为自己定义的OO关系可以映射到db。
xmuzyu
2008-05-26 00:44
如果是从新开发新系统确实不要先考虑数据库表,因为通过正向工程,可以直接生成数据库schema,而你要是改造遗留系统,那么也可以通过反向工程又数据库schema生成类。
banq
2008-05-26 12:04
是的,以上回答很正确,设计阶段根本不要考虑数据库和schema,这些属于编程完成后部署阶段的事情,传统工程方法将数据库schema提前到设计,是不符合OO的,是不能建立一个灵活健壮的软件系统的,也是不符合软件发展方向的,是倒退,是delphi过去时代。
>我试过之后认为自己定义的OO关系可以映射到db。
通过Hibernate都可以实现,可以参考Jdon框架开发的struts+jdon+Hibernate,都是自动生成的。
jesse
2008-05-26 16:29
假定持久层用的就是hibernate,要用什么工具自动生成?hbm2java,hbm2ddl都不能用了(说来好像有点讽刺,好像很多人都根据数据库自动生成映射文件/java源文件的,想想在MyEclipse中是如何用hibernate的!)
楼上说的ddl auto能给我个链接下载和教程?
假如持久层不用hibernate了,那又怎么办呢?
freebox
2008-05-26 17:29
由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么?
yewentao
2008-05-27 18:56
`````
MDA模型驱动架构
编程建模
hibernate
对象与关系数据库阻抗不匹配