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

一段无营养对话引起的口水-关于OO的一些对话

阅读更多

一段无营养对话引起的口水



QUOTE:

发件人 秦  隐藏详细信息 14:00 (2分钟前)
收件人
日期 2007-10-19 下午2:00
主题 与 秦 聊天
邮送域 gmail.com

13:02 秦: 请教一个问题,领域对象是什么概念?

--------------------------------------------------------------------------------
12 分钟

13:15 我: domain object
13:19 其实没有特殊的意义
13:20 秦: 名字知道,只是不了解具体的原理,不过说到原理,可能就不是一两句话可以说清楚了

--------------------------------------------------------------------------------
13 分钟

13:34 我: 呵呵,其实就是个名词。在面向对象设计时,可以把领域理解成“业务对象”,在持久层可以理解成“持久对象”,总之就是你某个领域中关注的对象。

--------------------------------------------------------------------------------
5 分钟

13:39 秦: 领域建模和领域对象有和区别?
13:41 我: 领域对象这个术语来源自“DDD”——领域驱动设计,DDD的主要方法论就是领域建模,领域建模的焦点就是实现领域对象,把核心业务逻辑封装到领域对象中。
13:42 秦: 好东西啊,虽然我还是不怎么明白
13:44 我: 不过目前在java里,受到orm的影响,领域对象一般都使用贫血模型——其中不含业务逻辑,所以领域对象的含义被弱化了,或者说被分解了。
13:48 举个例子:要写一个计算器工具。要能输入1+1,输出1+1=2,那么实现这个加法规则的对象就是领域对象。而输入输出的界面则不是,把计算结果保存到数据库中的对象也不是
一起都围绕着“问题领域”来,处理核心问题/业务的就是领域对象
13:49 秦: 领域对象持久化是什么概念?
有什么好的实现方式?
我: 保存到数据库中
orm,jdbc,保存为xml,还能有什么呢
13:50 秦: 持久化 就是保存操作?
我: 恩,持久化就是从内存到硬盘。
什么格式不管
13:51 秦: 我以为是一个保持这个对象可用
我: 呵呵
就是po
13:52 秦: 概念好多哇
我: 就是概念而已,不用管的,这些都是学院派搞出来的
13:53 秦: 感觉理论还是需要的,我现在理论太匮乏了
我: 只要理解就好了。
13:55 秦: 是啊,java这方面比较丰富
13:57 我: java主要做大型应用,有大企业和开源参与,所以发展比较严谨。
实际上做小应用没必要这么讲究
秦: 我是来学习思想的,哈哈
14:00 你来整理了哇,我觉得我们开发当中缺少就是思想
14:01 我现在还迷糊的呢,单个概念有点印象了,整体还没把握


老实说,我从来不觉得领域对象有什么用,就是一个概念而已。它的意义在于提醒我们设计上要注意解耦、注意抽象化,关注核心业务,开发围绕着业务对象进行而不是数据库
对DDD而言,数据库只是领域对象持久化的一个手段而已。正统的领域对象是包含业务模型(数据)和业务逻辑的,不过现在流行的是采用贫血模型,所以领域对 象分成为了PO+BO,前者保存数据,后者实现逻辑(有时候BO中的逻辑又被抽取到Service或Controller中去)。这两个对象层用DAO向 下(xml,database...)持久化,VO向上填充各种视图(html,excel,pdf...),组装并控制各个层次的则是 Controller。
这样的层次结构仅仅是一种选择而已,没必要一板一眼的照办不误。
java很重视思想,众说纷纭。我认为只有一个思想是根本性的:提高复用性 。这也是OOP的本意。为了提高复用性,OOP语言从语言级别提供了封装、继承、多态 三大能力;但是还不够,于是在代码级别上,程序员提出了一系列设计模式 来归纳其他技巧(在c语言时代,封装继承多态都是用设计模式来实现的);在程序设计级别上,程序员总结出的就是一些通用规则:组件化、分层思想等等 ,并用一些框架来实现它们——最常见就是MVC框架。
所以只要是符合复用性原则的设计就是好设计。不需要教条化、形而上。
那么怎么样提高复用性呢?很简单,只要模拟自然和社会就可以了 ——这是我自己独立领悟出来的,还没有其他人支持, ,也没有成熟的体系

 

 

【2007-10】

分享到:
评论

相关推荐

    OO设计原则 -- OO设计的 DIP依赖倒置原则

    ### OO设计原则 -- OO设计的 DIP依赖倒置原则 #### 概述 在软件工程领域,特别是面向对象设计中,依赖倒置原则(Dependency Inversion Principle, DIP)是六大设计原则之一,由著名软件架构师Robert C. Martin提出...

    docker-oo-源码.rar

    【描述】 Docker-oo 是一个基于 Docker 的容器化解决方案,它提供了一种高效、灵活的方式来部署和管理应用程序。源码分析将帮助我们深入了解 Docker-oo 如何利用 Docker 的核心特性,以及它是如何实现容器编排和管理...

    恶魔和梦魇的私语------- 关于软件开发的务虚主义对话(3).docx

    【标题】:“恶魔和梦魇的私语------- 关于软件开发的务虚主义对话(3)”探讨了软件开发中的设计模式、泛型编程与面向对象的融合,以及编译器处理的角色。 【主要内容分析】: 在这次对话中,恶魔和梦魇深入探讨了...

    the common-lisp oo

    到1987年3月,这一三方面的合作努力已产出了一份关于对象系统大部分内容的强有力草案。X3J13投票支持该草案,声明它几乎肯定会被采纳为标准的一部分,并鼓励实现者开始尝试实现。 从对面向对象编程(object-...

    SAP ABAP视频班教学共21课-L10 OOALV.7z

    OO-ALV的定义及调用 OO-ALV示例程序 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。 基本概念: 1.对象(Object)是一个现实实体的抽象。一个对象可被认为是一个...

    Fundamentos-Programacao-OO-源码.rar

    "Fundamentos-Programacao-OO-源码.rar"是一个压缩包,其中包含了一系列关于面向对象编程基础的源码实例,旨在帮助学习者深入理解和掌握OOP的核心概念。 1. 封装:封装是面向对象编程的核心特性之一,它将数据和...

    SAP-ABAP-OO-实现-CL-SALV-TABLE

    ### SAP-ABAP-OO 实现 CL-SALV-TABLE 的关键知识点 #### 1. ABAP 面向对象的 ALV 显示方法 在 SAP 的 ABAP 环境中,ALV (Application List Viewer) 是一种非常常用的技术,用于在屏幕上以表格的形式展示数据。传统...

    开源项目-hit9-oo.zip

    在“hit9-oo”项目中,主要包含的文件是“oo-master”。这个目录很可能包含了项目的主脚本文件、辅助工具和相关的文档。通常,这样的脚本会利用操作系统提供的环境变量、安装路径以及Go语言的版本管理工具(如gvm:...

    5-互评-OO之接口-DAO模式代码阅读及应用

    首先,接口在面向对象编程(OO)中扮演着规范和契约的角色。在Java中,接口定义了一组方法的签名,但不提供具体实现。通过实现接口,一个类承诺遵循接口定义的行为。这样做的好处包括多态性、解耦和扩展性。例如,在...

    ruby-oo-fundamentals-attribute-accessors-lab-wdc01-seng-ft-06012

    标题 "ruby-oo-fundamentals-attribute-accessors-lab-wdc01-seng-ft-06012" 暗示我们正在讨论一个关于Ruby面向对象基础的实验,特别是关于属性访问器(attribute accessors)的主题。描述中的 "ruby-oo-...

    侯捷-yahoo-GP/OO/C++

    ### 泛型编程与对象导向编程(GP/OO) 侯捷在雅虎所做的报告主要围绕泛型编程(GP)、对象导向编程(OO)以及C++展开。这表明报告内容将深入探讨这三种编程范式的结合运用,尤其是在C++这一具体语言中的应用。 ###...

    prototypal-oo-js-object-oriented-constructor-functions-lab-onlin

    标题中的“prototypal-oo-js-object-oriented-constructor-functions-lab-onlin”表明这是一个关于JavaScript中原型式面向对象编程(Prototype-based Object-Oriented Programming)的实验或练习,特别是涉及构造...

    恶魔和梦魇的私语------- 关于软件开发的务虚主义对话(1).docx

    1. **通用编程 (Generic Programming, GP)**: GP 是一种编程范式,强调编写可重用且类型无关的代码。GP 不依赖于特定的数据类型,而是利用模板等机制来创建泛化的算法和数据结构。在对话中,作者提到了 Python 和 ...

    漫談CSS架構方法-以OOCSS,SMACSS,BEM為例

    随着网页设计变得越来越复杂,为了提高CSS代码的可维护性和可复用性,行业内逐渐发展出了一些CSS架构方法。今天,我们将探讨三种流行的CSS架构方法:OOCSS(面向对象的CSS)、SMACSS(可扩展和模块化的CSS架构)和...

    ex2-fishee82oo-submit-history.zip

    ex2-fishee82oo-submit-history.zip

    ruby-oo-fundamentals-attribute-accessors-lab-sea01-seng-ft-07132

    标题中的"ruby-oo-fundamentals-attribute-accessors-lab-sea01-seng-ft-07132"表明这是一个关于Ruby面向对象基础的实验,重点是属性访问器(Attribute Accessors)。在这个实验室中,可能涉及到如何在Ruby类中定义...

    Data-OO.rar

    在"Data-OO.rar"这个压缩包中,我们看到的"HiData-OO"文件可能是一个包含PyQt编程实践的项目,特别是涉及数据操作和界面交互的部分。 1. **PyQt基础**:PyQt是由Python语言和Qt库结合而成的,提供了丰富的控件和...

    Advanced OO Methodology- 4Requirments.pdf

    根据给定文件的信息,我们可以提炼出以下相关的高级面向对象(OO)方法论及需求工程的知识点: ### 一、需求工程概述 #### 1. 为什么捕获需求很困难? - **用户认知不足**:用户可能无法清晰地表达他们的需求,...

    《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导

    第一册:《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。 第二册:《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计...

    vb-oo.rar_oo_vb类

    `vb-oo.rar_oo_vb类`这个压缩包文件显然包含了关于VB中面向对象编程的示例和教程。 VB中的面向对象特性主要包括以下几部分: 1. **类(Class)**:类是创建对象的模板或蓝图,它定义了对象的属性(Attributes)和...

Global site tag (gtag.js) - Google Analytics