`
dawnzhang
  • 浏览: 44870 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

面向对象的困扰

阅读更多

在当今这个ORM的时代,我们的Domain Object不经意间变成了一个个Data Object,EJB3的EntityBean尤为如此。

曾经尝试过在EntityBean中加入其CRUD及业务方法,让它看起来好像是一个Domain Object。DAO没有了(这个东东更像是面向过程,我们这里抛开Design Pattern),直接在SessionBean中操作EntityBean来完成Business。

问题来了,EntityBean由容器负责persistence,通过Annotation无法给EntityBean注入EntityManager,需要从SessionBean获取再交给它,这样会直接导致这个所谓的Domain Object不能串行化,这样的Domain Object还有意义吗?

另外,这个臃肿的EntityBean也违背了其设计者的初衷,究竟是面向对象限制了EJB,还是EJB天生不适合面向对象?

分享到:
评论
8 楼 Norther 2007-02-02  
牺牲一下  让domain object 知道spring的context,自己找到一些基本的crudDao,这样感觉好很多。。。
7 楼 pikachu 2007-02-02  
stamen 写道
_克斯 写道
OO永远是被动的,必须靠if,else来推动,因此,OO并不能解决问题的全部


被赋予了信息之后,OO才能有用武之地,但很多系统只是对信息本身的操作,只需要第一步就能满足需求,因此OO刃之锋锐就被雪藏了。

   非常同意你的看法!我们做的很多系统都只是CRUD,这种过程式的语言也很容易满足要求了(如PHP),并不需要过多地提OO,目前来看贫血模式(这个概念很吓人,哪个流氓提的啊 )还是比较适合的,也比较成熟。我想我们没有必要为了OO而去OO,快速解决问题才是关键,并不是每个一个Object都一定要数据+方法,这样也不免有点学究了。
严重赞同!!
6 楼 stamen 2007-02-01  
_克斯 写道
OO永远是被动的,必须靠if,else来推动,因此,OO并不能解决问题的全部


被赋予了信息之后,OO才能有用武之地,但很多系统只是对信息本身的操作,只需要第一步就能满足需求,因此OO刃之锋锐就被雪藏了。

   非常同意你的看法!我们做的很多系统都只是CRUD,这种过程式的语言也很容易满足要求了(如PHP),并不需要过多地提OO,目前来看贫血模式(这个概念很吓人,哪个流氓提的啊 )还是比较适合的,也比较成熟。我想我们没有必要为了OO而去OO,快速解决问题才是关键,并不是每个一个Object都一定要数据+方法,这样也不免有点学究了。
5 楼 _克斯 2007-01-28  
OO永远是被动的,必须靠if,else来推动,因此,OO并不能解决问题的全部


被赋予了信息之后,OO才能有用武之地,但很多系统只是对信息本身的操作,只需要第一步就能满足需求,因此OO刃之锋锐就被雪藏了。
4 楼 dawnzhang 2007-01-27  
从用例到领域对象再到关系数据持久化,complystill让我们似乎看到了EJB梦想照进现实的那一天
面向大内存的架构设计还期待我们去体验,正在路上...
3 楼 歆渊 2007-01-26  
确实目前的 Object 持久方案基本都是将 Data Object 真的当作 "数据" 去看待和实现, 这本身已经脱离了 OO 将 "行为" 加之于 "状态" 而进行整体封装的思想主线. 而业务逻辑也就只是通过对 "数据对象" 的操作去实现了, 这还是老一套的思维模式. 或者说是 "贫血的模型".

有空不妨看看 TOB http://www.iteye.com/subject/TheObjectBase, 基于这个新的数据库, 你就可以直接在应用持久模型里实现业务逻辑了. http://wow.dev.java.net 是个很好的参考项目.
2 楼 LucasLee 2007-01-25  
<br/>
<strong>dawnzhang 写道:</strong><br/>
<div class='quote_div'>
<p>在当今这个ORM的时代,我们的Domain Object不经意间变成了一个个Data Object,EJB3的EntityBean尤为如此。</p>
<p>曾经尝试过在EntityBean中加入其CRUD及业务方法,让它看起来好像是一个Domain Object。DAO没有了(这个东东更像是面向过程,我们这里抛开Design Pattern),直接在SessionBean中操作EntityBean来完成Business。</p>
<p>问题来了,EntityBean由容器负责persistence,通过Annotation无法给EntityBean注入EntityManager,需要从SessionBean获取再交给它,这样会直接导致这个所谓的Domain Object不能串行化,这样的Domain Object还有意义吗?</p>
<p>另外,这个臃肿的EntityBean也违背了其设计者的初衷,究竟是面向对象限制了EJB,还是EJB天生不适合面向对象?</p>
</div>
<br/>
<br/>
<br/>
要面向对象,就不要使用EJB,或者其他Remote Method Invocation 技术。<br/>
使用普通的JAVA类,就是最大化的面向对象。<br/>
分布式编程总有很多限制。
1 楼 robbin 2007-01-24  
目前Java的框架还不能够很好的实现你想要的Rich Domain Model模型。

除非使用AspectJ对domain进行拦截,注入DAO,或者使用Hibernate的Interceptor进行拦截注入DAO,这样才能让Domain对象rich起来,目前EJB3的EntityBean是没有这个能力的。

现有的框架,真正良好的支持rich domain model的其实是ruby on rails。

相关推荐

    面向对象编程的小项目,希望读者少走弯路

    在这个小项目中,我们将深入探讨面向对象编程的关键知识点,帮助读者避免在学习过程中遇到的常见困扰。 首先,我们要理解什么是对象。在OOP中,对象是数据和操作数据的方法的组合。这些对象基于类(Class)创建,类...

    java C# 面向对象方面的比较.doc

    在编程世界里,Java和C#都是广泛使用的面向对象的语言,它们在很多方面有着相似之处,但也存在一些显著的差异。以下是对这两种语言在面向对象特性上的对比: 1. 访问控制: - C#提供了public、internal、protected...

    C 面向对象程序设计的课程改革 (1).pdf

    《C++面向对象程序设计的课程改革》 C++作为计算机科学与技术专业的重要课程,其地位至关重要。它既是学生从面向过程编程过渡到面向对象编程的桥梁,也是巩固C语言知识、为学习Java等高级语言奠定基础的关键。然而...

    使用面向对象的技术创建高级-web-应用程序---外文文献翻译大学论文.doc

    JavaScript中的面向对象编程(OOP)与其他如C++、C#或Visual Basic等.NET框架兼容语言有所不同,这可能会对习惯于这些语言的开发者造成一些困扰。 JavaScript对象可以被看作是字典,其中包含了键值对。不同于C++或...

    UML面向对象分析与设计-设计性实验报告

    《UML面向对象分析与设计-设计性实验报告》 本实验报告主要涉及的是一个针对大学生论文选题的系统设计,旨在通过UML(统一建模语言)来阐述面向对象的分析与设计方法。该系统的目标是为广大的大学师生提供便捷的...

    面向对象程序设计(C++)学习指南.pdf

    面向对象程序设计(C++)是一种强大的编程范式,它基于类和对象的概念,强调代码的组织和重用。在学习C++时,遵循一定的学习方法至关重要,特别是对于初学者而言。 首先,学习《C++语言程序设计》(第4版)这本书时...

    致面向对象技术初学者的一封公开信

    过去6 年中, 我曾经无数次地在饭店、酒吧、旅店大厅等各种地方以同一种方式度过愉快而漫长的夜晚:和同样追求真理、光明和智慧的伙伴一起探讨面向对象的真谛。现在,我已经可以回答很多当年我遇到的问题。这些同样...

    java和C#和PHP和各种数据库优缺点.docx

    1. 面向对象:Java采用面向对象编程(OOP)思想,将现实世界中的实体抽象为对象,通过对象间的交互实现程序的功能。这使得代码更易于理解和维护。 2. 平台无关性:Java通过Java虚拟机(JVM)实现跨平台运行,可以在...

    Asteroid:用Java创建的第一个视频游戏,用于面向对象的编程

    用Java创建的第一个视频游戏项目,用于面向对象的编程。 游戏 世界上的咖啡已经用完了,只有您可以保存。 您是太空飞船的操作员,已被派往外星人的阿拉比卡植物中提取咖啡豆。 如果您不尽快得到它们,那么地球将...

    初学者实用用c++教程课件

    它不仅继承了C语言的效率和灵活性,还引入了类、对象、封装、继承、多态等面向对象特性,使得代码更加模块化和易于维护。 课程内容可能包括以下几个方面: 1. **C++基础**:首先会介绍C++的基本语法,如变量、数据...

    Delphi 学习宝典2.0

    它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language)、当今世界上最快的编辑器、最为领先的数据库技术。对于广大的程序开发...

    [2005最新C++经典著作]Imperfect C++ Practical Solutions for Real-Life Programming

    这本书以实用主义为出发点,针对C++语言的复杂性和面向对象编程中的挑战,提供了许多实践性的策略和技巧。 C++作为一门强大的系统级编程语言,其灵活性和效率吸引了众多开发者,但同时也因为其深度和复杂性让初学者...

    用电计费系统 用电的困扰

    C#语言支持面向对象编程,使得系统设计更加模块化,易于维护。同时,.NET提供了丰富的类库和API,用于数据库操作、网络通信、图形界面设计等,可以加速系统的开发进程。 开发过程中,可能需要用到以下技术: 1. **...

    urlplus:urlplus替代Java的URL类。 它是Java中解析和修改URL的一种更加面向对象(直观)的方式

    `urlplus`库是一个专门为Java设计的第三方库,其目标是提供一个更加面向对象、直观且易于使用的API,以便开发者更高效地处理URL。这个库是对Java内置URL类的一个增强,使得URL的操作更加简洁和灵活。 在`urlplus`中...

    Python学习笔记--皮大庆

    Python支持模块和包,可以用于开发各种类型的应用程序,从简单的脚本到复杂的面向对象程序。其语法简洁易读,拥有众多优秀的脚本语言特性,例如面向对象、内建的高级数据结构、支持多种平台等。 Python的特点主要...

    Data Structures And Algorithms With Object-Oriented Design Patterns In C Sharp.pdf

    ### 数据结构与算法结合面向对象设计模式在C#中的应用 #### 一、书籍概述 本书《数据结构与算法结合面向对象设计模式在C#中的应用》由Bruno R. Preiss编写,主要目的是通过使用C#语言来推广面向对象的设计方法,...

Global site tag (gtag.js) - Google Analytics