请教一个系统设计的问题
当使用Hibernate开源框架去做一个大中型系统的持久层时,我们一开始做的究竟应该是先设计数据库,然后按照数据库,使用工具将数据库映射成对象;还是完全撇开传统的关系数据库思想,使用Evans DDD的设计先建立实体之间关系图(或建立域模型),那么之后的数据库应如何生成,感觉始终都要面对RDB设计这样的问题。比较RDB是主流的数据库。
不知道大家在平时的设计时一般按哪样的流程去做,能否介绍下大家在使用Hibernate设计时的流程和思路。
最近一直在思考,如何使得关系数据库设计和Hibernate理念结合后产生的性能最好,能体现出Hibernate的优势和性能。Configuration config = AnnotationConfiguration().configure("/hibernate.cfg.xml");SchemaExport schemaExport = new SchemaExport(config);// script, export, justDrop, justCreateschemaExport.execute(false, true, false, true);
然后再检查生成的数据库表,必要时进行优化(如添加索引等)。
23 楼 wlcome998 2007-12-17 谢谢大家的讨论,最近偶然看到一本外文书,作者是参与Hibernate设计的开发人员,书中也对这设计的方式进行了讨论,作者就认为没有一成不变的设计方式,要根据具体的情况来做具体的设计方式,归纳为三种
1.POJO-Driven Approach
In the POJO-driven approach you start with an object/domain model, and using JSR-220 annotation or Javadoc metadata comments, you define how each field in a class maps to a database column. At runtime, Hibernate uses the annotations to dynamically create the mappings.
这种方法适用于数据模型还没创建和设计或者不明确的新应用程序
2.Data Model–Driven Approach
In the model-driven approach you start with a database schema for the chosen database system, and using a tool like Middlegen or Hibernate Synchronizer, you generate mappings and POJOs for each table being mapped. This approach provides a fast start-up time for development。
这种适合已建立明确的数据库或者数据模型的web开发,并能快速的开发。
但也指出使用这种设计的方式会造成域模型的semantic(语义)不够丰富,达不到你原先设想的那样。
3. 作者自己推荐的是一种是第三种方式,称为HBM-Driven Approach。
The two previous approaches, taking either a domain-model or data-model approach, typically result in HBM mappings that are not quite complete. Every time I use either of the approaches above in a moderately complex application, I find myself fine-tuning the HBM files to either
get more accurate POJOs (in the data-driven approach) or more efficient, manageable database
schema (in the POJO-driven approach). The third approach suggested here takes the stand that object-relational mapping is an inescapable, necessary evil that should be taken into consideration early and in a head-first fashion in the development of your application.By
creating detailed, accurate HBM files you will end up with both a domain model and a database schema that meets your application needs and ensures the longevity of the data 24 楼 wlcome998 2007-12-17 个人感觉像是对前两种方法的一种优化或者折中 25 楼 fangzhouxing 2007-12-17 引用最近偶然看到一本外文书,
请问是那本书?能给出书名吗?
26 楼 wlcome998 2007-12-18 是pro hibernate系列的书 27 楼 ff_ff 2008-01-09 先设计实体,由实体生成表 吧。 28 楼 sslaowan 2008-04-12 其实领域模型中的实体和实体关系模型中的实体能有多大区别呢?
领域中有些对象是要建模为每个都是不同的,那就建成实体咯。
然后实体和实体之间有关系,就有了实体关系模型中的关系
就有了领域模型中的关联关系。
对象中有继承关系,实体关系模型没有,但有很多策略可以进行映射[Fowler02]
然后对象建模-->实体关系模型 29 楼 gblyh 2008-05-20 感觉两者都需要兼顾,一个良好的设计必定你的闹钟都会既有领域模型,又有数据库模型,我们团队的方式一般都是兼顾,不过一般我们在数据库设计的时候也做了不少重构工作,兼顾领域模型和数据库模型,因为对于一些结构双方的映射方式还是有不少选择的。我觉得你们不管用哪种,肯定要先出一个设计,然后做映射,能端到端走通了的话,就可以进行开发 30 楼 Joo 2008-05-20 抛出异常的爱 写道数据库驱动
页面驱动
数据模型驱动
领域模型驱动
。。。。。。。。。。。。。。。
你用哪种?
这么多糊弄人的名词 用得着这么复杂么 31 楼 maming2000 2008-05-21 改造旧系统是不能或很难生成自己想要的结构的,对新系统用对象建模应该做对象缓存,应用服务器共享缓存达到性能优化。 32 楼 coolnight 2008-05-26
强烈建议使用数据库驱动(或者hbm驱动,但是hbm要根据数据库的设计来)
个人觉得这是最保险、最直观、最快速的做法
除非你的系统很小、不需要考虑性能问题
33 楼 huanghanjun 2008-08-15 在路上主动和你套近乎的陌生人,就不要傻不拉叽的给人电话号码了,你会被短信电话骚扰致死的。
在场上不要标榜自己多能喝,很男人的与人划拳喝酒了,真正在乎你的人是不会看着你喝到醉醺醺的。
告别灰姑娘和白马王子的白日梦吧,你的脚没那么小,穿不进那水晶鞋。
有给男友买进口剃须刀的钱,不如给老爸买双袜子,他穿着你老妈补过几次的袜子,你注意了吗。
有份稳定的工作,多赚点钱,女人一定要经济独立,才有独立的人格,防止以后成了娜拉,鲁迅爷爷说过娜拉出走后要么回来,要么沦为娼。
中年男人,特指大款,请你吃饭唱歌泡吧,拒绝吧,你算计不过他们的。
曾经背叛过你的男人想回头,对其说不。
你曾经背叛的男人请你回头,对其说不。
学点衣装搭配,不要再红陪紫好死不死的穿着出门了。
对于年少时幼稚男对你的山盟海誓,一笑而过吧,他说这些话肯定没经过大脑。
大事坚持原则,小事学会变通。
没必要和男友争个面红耳赤,你对了,他会认为你争强好胜得理不饶人,你错了,他会认为你无理取闹没完没了。
有钱买条高档项链,总比戴着块假玉让人看着有品味。
别再动不动就学野蛮女友暴打你男人了,打坏了没有替身给你抗米面袋。
不要爱上有家室的男人,等他老婆孩子老父母全家总动员时,你会死的很惨。
每年做个身体检查,尤其是肝、肾、乳腺。
偶尔和妈妈一起下厨,永远比和姐妹淘无事生非的在一起胡吃海喝来得开心。
对于你真正要与其结婚的男友,要忠诚。
不要再认为你在玩别人的感情,对手可能比你道行要高。
想嫁给他,要做好安全措施;不想嫁给他,就更要做好安全措施。
不要再当月光族,你该学着攒些嫁妆钱了。
不要老买速溶咖啡在家喝,偶尔去趟星巴克,他会认为你懂得生活。
永远记住,和男生一起没白没黑的网游,只属于大学时代。
除非真有必要,没必要时时更换最新款手机,否则别人会认为你是卖手机的。
了解父母的身体状况。
此时的你至少该有张驾照,无论你是否有车。
至少有一个和你暧昧的异性朋友(没有性关系的那种),既可以是你的精神百宝箱也可以当精神垃圾桶。
不要和女友的男友走得太近,背后会挨姐们儿的骂。
不要指望你的男友挣钱洗衣做饭家务样样精通,他没有超人的内裤可以穿在外面。
不要反复强调结婚以后你的男友一定要孝顺你的父母,甚至扬言要把父母接来一起住,让老公和岳父岳母相处,人与人是相互的,要是他把自己的父母也接来,你们家将会热闹得超乎想象。
不要才开始相处就提结婚,也不要连续两次拒绝你男友的求婚。
不要再想你这辈子必须找个梁朝伟或是郭台铭,因为你不是刘嘉玲。
不要找比自己小三岁以上的男孩,因为你也不是王菲。
买份保险,如果单位办了社保,就不必了。
给妈妈买些实用的东西,她会觉得比花要好几百倍。
有自己去SPA的时候不如陪妈妈去洗个澡,给她搓搓背。
万事随缘,但不要放弃努力。
不要给自己太大压力,不要学做咄咄逼人的女强人,你会越来越孤独。
有剩余资金,可以考虑买房了,结婚的房子不一定完全由男友负担。
无需把男人看得太复杂,人与人之间往往是彼此复杂化,当然,也不要当他们是白痴。
不要时时缠着男友,留给他点空间,感情会更深。
没事去看看男友的父母,比单纯巴结他管用的多。
男友多再不是你可以骄傲的本钱,只会被认为不靠谱。
对男友好不是件做作事儿,尤其人多的时候,对男友呼来喝去,他会很没面儿,也只会让人觉得你很没品。
此时的你再是闲人一个,没人会再夸你是乖乖女。
不要以为自己吸烟很有魅力,对皮肤不好,而且显得很风尘。
假如你还认字,那么经常看看书,提升一下自我修养。
别瞧不起你正经上班但挣得不多的姐们儿,人家吃碗面条,都是自个儿的血汗钱。
在朋友面前不要炫耀和自以为事(这样是很令人反感的)。
关心一点国家大事吧,别说俄国总统还是普京,政治不只是男人的事。
常关心一下你的男友,但关心不等于唠叨加监视。
和男友出去吃饭,不要因为自己是女孩,就不愿意埋单,觉得他请你是应分的,凭什么呀,你又一点也没少吃。
学学化妆吧,素颜美女是要拼年龄的,你很快就没这优势了。
多半男人认为,女人晚上也要和白天一样有魅力***。
如果你没有林妹妹那般才情容貌和身世,就不要动不动的流泪了,即使你做的出葬花吟,估计你也不想步林妹妹吐血后尘,关键是宝哥哥最后还娶了别人。
至少要保留一种健康的爱好,如:游泳,慢跑,乒乓等,记住逛街不算。
不要羡慕谁的好姐们儿比你多,她们的闹心事和这个数目也是成正比的。
永远不要认为别人的老公比你的好,因为他们爱的不是你。
保养一下头发吧,顶着一头烂草,彩妆也彩不起来。
多夸夸你的男友,你的一句话或许就是他的动力,会为你带来经济效益的。
想继续发展的男友最好带给父母看一看,老人的眼睛有时候确实比你雪亮。
不要再学男人说脏话了,你不是小太妹,会成为老太姐的。
以精打细算为荣,以乱吃零食为耻。
衣服不用一天一换,花枝招展的容易让人眼晕。
和男友的男友要保持一定距离,太远他会说你对他朋友不热情,太近事儿可就大了。
没有任何一件事,任何一个男人,值得你彻夜不眠或街头买醉,或者买安眠药。
女人,光鲜儿就那几年,以后拼的是道行而不只是脸蛋。
永远高雅的微笑。