`
ohmygodlzl
  • 浏览: 21413 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

对OOD和相关概念的理解(二)

阅读更多
这个系列是早前发布在部门wiki上的,引导组里的兄弟入门OOD,希望同样对刚刚走到OOD门前的同学有用。

    按照面向对象的观点,软件中的实体应该是对现实世界中实体(或者概念)的模拟,这种模拟包括名称、属性(状态)和职责。打个比方,在软件世界中定义"狗"这个对象,我们需要从现实世界寻找启发,定义如下:



    狗的属性和动作都是对现实世界中的模拟,这样你玩星际的时候招募了一条小狗,你知道其实是创建了一个狗的对象,它有类似现实世界的这些属性和动作。这种模拟就是David老师经常提到的"低表示差异"。

    但是返观我们写的程序,XXXDTO,XXXDAO,XXXService,XXXController,这些怎么看都在现实世界中找不到对应的实体或者概念,你能走在路上看到对面过来一个GatewayPayOrderDAO吗?GatewayPayOrder是一个现实中的实体,如果没有我们的系统,我们可以设想有个商户拿着一张纸制的网关订单找到我们,然后我们按照上面的卡密进行充值确定点数,然后把点数打到商户的账户上,这是现实世界中的采购业务,商户卖给我们卡密,我们给他们点数。按照对现实世界的模拟,GatewayPayOrder应该类似下面这样定义:



    订单应该是一个有属性有职责的实体,跟其他的实体一起协作完成整个业务。但是我们系统中的GatewayPayOrder却是一个标准的JavaBean,封装一堆属性,只提供set/get方法,持久化逻辑被放进DAO,业务处理逻辑被放进Service。为什么会是这样?
    我对此的理解是:我们已经远离了面向对象的原始社会,生活在 "企业级开发"的现代社会。这里的"原始"和"现代"不是说落后和先进,而是说软件开发所处的环境。处在"原始社会"的人们,要自己处理所有的事情,除了要实现需求(即业务逻辑),还要关心持久化,多线程,安全,事务,分布式,远程交互等柴米油盐的琐事。随着"企业级开发"的进展,要构建的系统越来越复杂,软件被切割,分离,通用的东西被单独封装起来,比如多线程,安全,分布式被封装到应用服务器(所谓的中间件)和"组件模型"(比如EJB)中,持久化、事务被提取到专门的OR Mapping框架,远程交互被封装到RMI,Web Service中,甚至对象间的依赖关系管理也被封装到了框架(比如Spring)中。于是我们这些程序员出门有公交,吃饭有餐馆,取钱有银行,生活的基础设施健全完备。也正因为这个原因,我们需要按照框架的要求和前人已经证明过的原则重新面对"面向对象"这个概念,封装持久化逻辑的DAO,封装业务逻辑、业务规则的Service,用于分层架构层间传递数据的DTO,这些很难在现实世界中找到对应的"对象"应运而生。       
    在《UML和模式应用》这本书中把DAO之类的对象定名为"纯抽象",它们的出现是按照"高内聚,低耦合"的原则,把多种对象内的共有逻辑(比如持久化)单独抽取封装出来而成。由此可见,即使生活在条件优越的"现代社会",一些关键的"生存法则"还是延续了"原始社会"的经验教训,这些"生存法则"就是面向对象的理念、原则、方法。明白了这一点,我们在写XXXService,XXXDAO的时候就需要根据一些原则和方法想一想,我们是不是真的需要这样一个"对象",以及它应该承担什么样的职责,封装什么样的逻辑。
  • 大小: 6.6 KB
  • 大小: 11.1 KB
分享到:
评论

相关推荐

    如何解释OOD及设计

    OOD的目标是确保软件能够适应未来的需求变更,同时也易于理解和维护。 ### OOD与OOP的区别 虽然OOP是OOD的基础,但两者关注的层面不同。OOP关注于单个对象的实现细节,如类的设计、属性和方法的封装;而OOD则更...

    如何向妻子解释面向对象设计(OOD)

    面向对象设计(Object-Oriented Design,简称OOD)是软件工程领域中的一种设计思想,它强调将...正如文章中所提到的,即使是从日常生活的角度理解OOD,也能感受到其背后的智慧和魅力,这无疑是对OOD价值的最好诠释。

    如何向妻子解释OOD和设计模式——桥接模式

    通过阅读这两篇文档,即使是对编程不熟悉的读者也能理解OOD的基本思想和桥接模式的精髓,这对于增进夫妻间的沟通,或者向非技术人员解释IT知识都十分有帮助。设计模式的掌握不仅可以提升个人的编程能力,也有助于...

    c# OOP/OOD

    OOP(面向对象编程)和OOD(面向对象设计)是C#中的核心概念,对于任何希望深入理解和掌握C#的开发者来说,这两者至关重要。 面向对象编程(OOP)的核心理念是将现实世界中的实体抽象为类,然后通过类创建对象来...

    什么是OOA与OOD

    接下来我们将详细探讨 OOA 和 OOD 的核心概念、发展历程及其应用。 ### 一、面向对象分析(OOA) #### 1.1 概念介绍 面向对象分析是一种分析问题域的技术,其目的是理解问题域并将其建模为对象模型。在这个阶段,...

    OOA、OOD和UML

    **对象导向分析(OOA)、对象导向设计(OOD)与统一建模语言(UML)是软件工程领域中的核心概念,对于理解和开发复杂系统至关重要。** **对象导向分析(OOA)**是软件开发过程的一个阶段,其目标是理解问题域,识别...

    OOD启思录 高清pdf

    本书将帮助你理解经验原则和“设计模式”这一流行概念之间的相互作用。你可以借助经验原则发现设计中所存在的某一方面的问题,而设计模式则提供了解决方案。  本书对各个层次的开发者都有价值。新手能借助本书走上...

    OOD启思录(高清)

    《OOD启思录》这本书将详细阐述这些概念,并提供实例和练习,帮助读者掌握面向对象设计的精髓,提升软件开发技能。通过阅读和实践,你可以更好地理解和应用面向对象设计原则,从而提高软件项目的成功率。

    OOD.rar_ood

    8. **分析与设计**:在对象导向设计中,先进行需求分析,理解业务流程和实体,然后进行概念设计,定义类和对象的职责,最后是详细设计,包括接口设计和实现细节。 9. **重构**:OOD也强调代码的持续改进,通过重构...

    ooa,ood介绍资料

    在本教程中,我们将探索面向对象分析(OOA)和面向对象设计(OOD)的基本概念。这些方法是软件开发过程中的关键步骤,特别是在理解和建模复杂系统时。我们的目标是展示如何通过用例分析、场景定义、顺序图和类图来...

    面向对象技术的C++ OOD实践

    通过理解OOA、OOD的基本概念,熟练掌握C++的面向对象特性,以及利用UML进行建模,开发者能够构建出符合业务需求且易于维护的软件系统。在整个过程中,泛型编程和模板的使用进一步增强了代码的通用性和效率。

    Java OOA & OOD & UML

    ### Java OOA & OOD & UML:深入解析与应用 #### 一、引言 在不断变化的商业环境中,软件开发必须采取一种不同于传统的“大爆炸”模式的方法。传统的大爆炸模式,即瀑布模型,几乎不支持需求变更或风险规避,这...

    ooa与ood实习示例下载(北大教程)

    在"ooa与ood实习示例下载(北大教程)"中,我们有机会深入理解这两个概念,并通过实际案例学习如何应用它们。** **OOA阶段是软件开发的前期工作,主要关注于理解业务需求并转化为模型。在这个过程中,主要任务包括...

    OOA/OOD方法及其在MIS中的应用

    而OOD则是在OOA的基础上,将这些概念模型转换成计算机能够理解和处理的结构化模型,决定软件的结构和模块如何组织,以及如何利用面向对象编程语言实现这些结构。 面向对象的开发方法具有几个显著特点。它注重将系统...

    OOP/OOD三件套

    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起,以提供更好的模块化和抽象性。在这个领域,有三个核心的理论基石,分别是:设计...

    面向对象设计(OOD)方法

    面向对象设计(Object-Oriented Design,简称OOD)是一种软件设计方法,它基于面向对象编程的概念,如类、对象、封装、继承、多态等,旨在创建可维护、可扩展和可重用的软件系统。面向对象设计的目标是将分析模型...

    OOD Lecture 20090508.doc

    总的来说,这份文档提供了丰富的面向对象设计知识,不仅涵盖了基本概念,还深入到设计模式的应用,是学习和理解OOD的宝贵资源。通过深入学习和实践,开发者可以更好地应用这些原则和模式,提高软件开发的质量和效率...

    OOD启思录-面向对象圣典(英文版)

    - **设计启发式原则**:由Arthur Riel提出的一系列面向对象设计启发式原则,旨在帮助开发者更好地理解和改进面向对象设计。这些原则不仅限于特定编程语言,而是适用于所有面向对象的设计过程。 - **目标**:提供...

    UML 培训资料RUP,OOA,OOD

    UML、RUP、OOA和OOD构成了软件开发中的重要概念和方法。UML提供了一套图形化的建模工具,RUP提供了一个完整的开发流程框架,而OOA和OOD则关注于分析和设计阶段。IBM的培训资料通过深入浅出的讲解和实例,帮助开发者...

Global site tag (gtag.js) - Google Analytics