http://www.jdon.com/jivejdon/thread/38851
转载借鉴,学无止境苦作舟。
05年底的时候,我们项目组要开发一个ERP的系统。我们选择了jsf(ADF)+spring+hibernate的架构进行系统开发,3层分层架构进行设计开发。技术经理把表设计好,跟我们讲清楚表和表之间的关系,然后我们写model,dao,manager,form来实现。那时候我根本没有什么面对对象的设计或者面向数据库的设计的概念,感觉应用系统主要就是设计表之间的关系,数据库的一系列操作。这样浑浑噩噩过了1年多,在jdon上了解了设计模式,但是那时总觉得很难把设计模式落到实处。可能这也是面向数据库设计的结果吧,领域对象都是贫血的,没有行为,只是一个数据的容器,所以也谈不上封装变化什么的。
又继续用这个框架做了几个项目,项目组的人在无意之中倒也配合我的无知。有人画界面原型,有人直接设计出数据表,然后我就吭哧吭哧根据表建model对象,然后利用自己写的模板,快速生成dao,manger,form,jsp界面。呵呵,我估计现在有些公司也是这么做的,结果很明显的,一开始开发速度很快,随着客户的需求变化,你的manager层的逻辑代码也越来越复杂,model中也出现了一些不想看到的字段,再最后,有些manager的业务方法,都不忍心看了。
一直感觉自己徘徊在OO设计的门外,入不了门,直到最近对业务系统设计有了新的认识,以及明白了领域对象生命周期这个概念。
我现在已经明白对系统进行OO设计还是数据库设计不是jsf+spring+hibernate架构所引导的,而在于你是不是有OO的思想去引导你的设计。但是这个架构,或者说这个架构的一些流行的例子确实会给经验不深的设计者产生束缚,会让技术架构影响了对象设计,从而限制了设计者对对象设计的想象能力。用这个架构的时候,领域对象一般是贫血的,jsf页面直接绑定领域对象,然后在web的action里调用manager层进行对象的数据交互和持久化。在这样的思路下,领域对象好像只是一个临时性的数据容器,为request-response阶段业务数据的交互,持久化服务的,他没有舞台去表现他的表达业务的能力。这难道就是领域对象应该扮演的角色吗?把自己的舞台让给更像是技术对象的service来表演?没有更好的方法去表达一个系统吗?当我看到《领域对象设计》这本书的第6章领域对象的生命周期这一章时,看到banq的cargosimple中用的xxxInMem.java这样的仓储类时,我发现原来可以换个角度来理解一个业务系统的。业务系统是领域对象的活动场所,领域对象本身具有的数据和他的行为才是一个业务系统最核心的东西,而数据库是对象冬眠的一个地方(对象冬眠好象有点不恰当,因为数据库做的只是对象数据的持久化)。而orm这些框架,变通的实现了对象的冬眠,及对象的唤醒。我觉得这样去了解一个业务系统太棒了。因为领域对象有生命的,所以设计师可以决定领域对象存活多少时间。比如说,我以前的项目中,领域对象的生存周期都是在一个request,response中的,时时刻刻都被冬眠,造成的结果就是整个业务系统里,没有活动的领域对象,都是冬眠的对象,而要使用这个系统,就需要先把领域对象唤醒,然后进行业务交互。而现在看的一些例子,dddsample,或者JiveJdon,都是把领域对象放到缓存中,对象在里面不需要冬眠,是活着的,那么整个业务系统就是有生命的,或者说效率比较高的。
随着对领域对象生命周期的了解,也解开了看示例项目时产生的一些疑惑。现在看的一些示例项目,发现领域对象里往往都有同步方法,而自己以前写的项目,根本没有用到同步功能。现在分析起来,是因为我以前的项目中,领域对象都是贫血的,没方法需要同步,而且领域对象都是request-response期间的,每次被客户端唤醒(比如通过hibernate)的对象其实是不同的对象(业务上可能是同一个对象,但是机器系统里的这些对象的内存块不一样),因为是不同的内存块,所以他们的方法也就不需要同步了。而现在当领域对象有状态后,可以一直活在内存里,那么每个客户端用的领域对象都是可以是同一个(无论业务上,还是机器系统的内存块),那么领域对象的一些业务方法涉及到领域对象自身的数据变化时,就可能需要同步了。
分享到:
相关推荐
解放思想大讨论PPT课件.pptx
解放思想是科学发展观精神实质讲义.pptx
【标题解析】: "解放思想应注意的几个问题.doc" 这个标题表明文档主要讨论的是在进行思想解放的过程中需要注意的关键问题,旨在提醒人们在推动改革和发展时如何正确理解和实践解放思想这一原则。 【描述简述】: ...
【大学生就业要解放思想】的主题强调了在就业过程中,大学生需要突破传统的思维模式,适应不断变化的社会环境。在当今就业竞争激烈的环境下,大学生应当勇于尝试不同的职业道路,而不是仅仅局限于传统意义上的“好...
三层架构是一种常见的软件设计模式,它将应用逻辑拆分为三个独立的层:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer),以实现更好的可维护性和可扩展性。...
首先,解放思想意味着教师要敢于突破传统思维的束缚。过去,教师可能过于依赖教材,忽视了对学生个体差异的关注和创新能力的培养。通过讨论,教师能认识到这种局限性,学会灵活运用多种教学方法,激发学生的学习兴趣...
思想解放与思想一统之间存在微妙关系,思想一统并不等同于思想束缚,但过度的一统可能会阻碍新思想的产生。社会共识应在言论自由的基础上自然形成,以确保社会的稳定与和谐。同时,大众的意愿和思想在社会实践中的...
标题中的“解放思想心得体会:解放思想要善于学习”指出了解放思想的重要性,并强调了学习在这一过程中的关键作用。本文主要探讨了解放思想与学习之间的紧密联系,以及如何通过学习来促进思想的解放。 首先,历史的...
公司领导层深刻认识到解放思想的重要性,强调“凡事不要先说不能”的思维方式,旨在打破传统束缚,激发员工的创新意识和进取精神。通过组织学习和全员大会,统一思想,提高员工对企业发展紧迫性和科学性认识,树立...
因此,**地区必须进一步解放思想,找出自身与先进地区的差距,并明确发展方向。 1. **找差距、明方向** - **工作上的差距**:如增速快但总量小、工作成绩未得到有效总结推广等。 - **思想观念上的差距**:例如...
其次,解放思想要求我们敢于创新,勇于担当,走在时代的前列,勇于挑战旧有的体制和习惯。这需要我们具备求真务实的态度,实事求是,以诚待人,扎实工作。同时,要有全局观和战略思维,从长远角度考虑问题,制定科学...
《解放思想学习心得:突破思想解放的难点》这篇文章深入探讨了思想解放的重要性和实施过程中面临的挑战。思想解放,作为社会进步和改革的关键因素,涉及到观念的更新、行动的转变以及利益格局的调整。以下是对文章...
解放思想是指打破传统束缚,摒弃僵化思维,以开放和批判的态度审视和改进旧有的教育教学模式。创新思维则是指在教学过程中不断寻求新方法、新途径,鼓励创新意识和实践,培养学生的创造力和问题解决能力。 1. 理念...
面对激烈的就业竞争,大学生需要有敢于尝试的精神,不怕失败,勇于走出舒适区。即使一开始的工作条件并不理想,也可以视为积累经验、提升自我的过程。 总之,大学生就业要实现“解放思想”,就需要打破传统的就业...
【标题】中的“电力企业...总的来说,电力企业要实现可持续发展,必须打破传统思维束缚,通过不断创新和改革,适应日益变化的市场环境,确保能源安全,提升经济效益,同时也要关注环境保护,实现绿色、低碳的发展目标。
【标题】和【描述】中提到的文档是一个关于"解放思想我先行"的演讲稿,主要探讨了解放思想在个人、社会和国家发展中的重要性。【标签】为空,但我们可以根据演讲稿的内容来概括几个关键词,如“解放思想”、“创新”...
1. 解放思想的含义:解放思想是指打破传统思维模式,摆脱陈旧观念、做法和体制的束缚,使思想认识与时代发展相适应。在就业领域,这意味着要摒弃固定的职业期待,勇于尝试不同的职业路径和行业选择。 2. 大学生就业...
解放思想大讨论个人心得体会:“解放思想”感言.pdf
总结起来,这份心得体会体现了通过学习、思考、实践和转变来推动个人和组织成长的理念,符合"解放思想大讨论"的主旨,即鼓励大家打破思想束缚,以创新思维推动工作进步和社会发展。这一过程不仅对个人的职业发展有益...
【标题】中的关键词是"解放思想"和"高质量发展",这与【描述】中的内容一致,都强调了解放思想在推动高质量发展中的重要性。这是一个关于个人或组织参与"解放思想推动高质量发展大讨论活动"后的心得体会。文档可能...