`
zhangyatong
  • 浏览: 2639 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

面向对象现状

 
阅读更多

书中作者发现了一个现象,很多j2ee设计背离了oo原则:认为持久对象不应该包含任何行为。

作者认为仅仅暴露getter和setter的对象不是真正的对象,一个对象应该包含除了属性外还应该包含这个对象的行为。

联想到学过的所有对面向对象编程的解释,发现貌似真是如此。面向对象编程:所有的分析、设计、开发都以对象为基础。而对象又是什么呢,对象是现实中存在的抽象,是具体实物的逻辑表现。如果对马做抽象,我们自然的会发现:它有四条腿,它可以跑。

但是工作这么久却发现,国内流行的mvc,流行的三层,很多都不是面向OO的。

很多遗留项目中分三层后,只是根据行为做了横向切分:模型层就是一个个持久化对象,控制层就是一个个action或controller,表现层就是html或者jsp,一个业务对应一个或者多个action,后面跟着多个biz,和多个dao。每个对象要么全是方法,要么全是引用,或者全是属性,或者更狠的混成一团。现在想来,这TMD根本不是面向对象啊。。。这是面向过程啊。。。

也许项目在设计初始是根据对象设计的,但是后期业务添加或者修改后,已经通过代码看不到马有几条退,马是怎么跑的。。。

这就是我看到的国内OO现状,没有人注意到代码是什么,大家都在看功能实现了没,但是这种偏离设计原则的代码,维护性真的值得思考。。。

0
0
分享到:
评论
2 楼 zhangyatong 2014-12-24  
xiaokek 写道
个人砖头,仅供引玉:
1、项目中分三层,是在系统框架层面做了符合面向对象思维的设计,它把每个业务的控制器抽象成一个个Action,这个控制器接受参数,转发请求给biz层(也有叫service层的),最后返回结果,指定视图


是啊,国内对开发要求更多的是,快速上手,快速完成功能。开发会按要求写某个逻辑的时候就去看相应代码,改完ok收工。多高效。。。项目迭代一个月后自己看写过的代码也搞不懂了,变得小心翼翼。再久一点就变成无人敢动了。好一点的会抽象些类和方法,然后下一次迭代 。但是,很少有人想过,要根据对象来实现。。。不知道到什么时候国内才会改变这种方式。。。也许“面向对象”成本比较高吧。呵呵,好好学习,谢谢@xiaokek的分析
1 楼 xiaokek 2014-12-21  
个人砖头,仅供引玉:
1、项目中分三层,是在系统框架层面做了符合面向对象思维的设计,它把每个业务的控制器抽象成一个个Action,这个控制器接受参数,转发请求给biz层(也有叫service层的),最后返回结果,指定视图。
2、而业务逻辑层(biz层),一般都是一堆业务逻辑的堆叠,接受Action给它的参数,完成指定的任务即可,需要持久化数据时,再转发给dao去查询和存取。所以biz层在代码结构层面是被抽象成用于处理真正业务逻辑的组件。

这样设计的好处是:
1、所有业务的处理全部统一为以上说明的一套完全一样的处理流程,负责具体业务逻辑开发的程序员无需考虑其他,只需关注业务逻辑代码的编写即可。
2、其他程序员看到同样结构的代码层次,更容易理解和上手。我接触到的一部分程序员看到一些不是action,biz,dao的包,因为不能迅速理解,会觉得有学习上的阻力,因而排斥。

这样设计的缺陷是:
1、因为系统业务逻辑的复杂度高和变化过快,容易在biz层陷入面向过程式的处理,过多的if语句,过于复杂的逻辑处理,导致博主所说的“混成一团”的状态。

我的理解,在业务逻辑层是有很多东西可以挖掘的,可以用表驱动设计去消灭过多的if,用各种短小只做一件事的方法来封装逻辑,减小复杂度,还有很多写出好代码的方法,不一一列举了。我觉得题主最后想表达的意思应该是大家都应该多学习学习,应该怎么样写出“好的没有异味”的代码。

相关推荐

    面向对象分析的发展现状

    ### 面向对象分析的发展现状 #### 一、面向对象概述 面向对象(Object-Oriented, OO)作为一种主流的软件开发范式,在当今软件工程领域占据着举足轻重的地位。面向对象的核心思想在于模拟现实世界中的事物,将它们...

    北大面向对象技术

    ##### 1.5 面向对象方法的发展史及现状简介 面向对象技术的发展始于20世纪70年代,最初由Simula 67编程语言引入,随后Smalltalk语言将其推广。到了80年代末至90年代初,随着C++、Java等语言的流行,面向对象技术...

    面向对象测试技术的研究

    面向对象测试技术是软件工程领域中的一个重要组成部分,其核心目标在于确保面向对象软件的质量和可靠性。本文基于《面向对象软件测试技术的研究与应用》一文,深入探讨面向对象测试的关键概念、测试层次、方法以及...

    面向对象的系统设计.part1

    本书是一本论述 面向对象设计方法的专著,其第1版于2003年由清华大学出版社出版,被国内许多大学用作研究生或高年级本科生教材,并被许多软件开发单位作为工程技术用书。本次再版,根据国内外面向对象领域理论与技术...

    软件工程的面向对象分析与设计

    面向对象分析与设计是软件工程中的关键步骤,它在创建高效、可维护的软件系统时起着至关重要的作用。在本案例中,我们关注的是基于B/S(Browser/Server)架构的火车售票系统,该系统利用面向对象的方法进行分析和...

    面向对象的分析方法(OOA介绍)

    与传统的结构化分析不同,OOA更侧重于对面向对象方法所需素材的归类和整理,而非仅仅关注业务现状的分析。 OOA模型包含五个层次:主题层、对象类层、结构层、属性层和服务层,以及五个活动:标识对象类、标识结构、...

     面向对象技术 面向对象技术 面向对象技术

    面向对象技术是软件开发中的一种核心方法,它基于对象的概念,强调数据和操作数据的方法的封装,以及类的继承和多态性等特性。面向对象技术的实施在计算机科学,尤其是计算机专业教育中占据着重要地位,特别是在毕业...

    面向对象C编程

    #### 二、面向对象编程的历史与现状 尽管面向对象编程的概念已经存在多年,但它在近几十年里才成为主流的开发范式之一。C++等语言因其支持面向对象特性而被视为“新语言”,但实际上,即使使用纯ANSI C也可以实现...

    面向对象课程设计 宾馆客房管理

    面向对象课程设计的目标是让学生通过实际的项目开发,掌握软件工程中的分析、设计、编码、测试和文档编写等技能。本实例中,选取的课程设计主题是“宾馆客房管理系统”,这是一个典型的业务管理系统,旨在帮助宾馆...

    面向对象的系统设计.part2

    本书是一本论述 面向对象设计方法的专著,其第1版于2003年由清华大学出版社出版,被国内许多大学用作研究生或高年级本科生教材,并被许多软件开发单位作为工程技术用书。本次再版,根据国内外面向对象领域理论与技术...

    C 面向对象程序设计实践教学改革探讨.pdf

    《C++面向对象程序设计实践教学改革探讨》这篇论文主要讨论了在计算机专业教育中,C++面向对象程序设计课程的教学现状及存在的问题,并提出了一种多样型实践教学改革方案,旨在提升学生的学习兴趣和综合编程能力。...

    “C 面向对象程序设计”教学方式改革研究.pdf

    【C++面向对象程序设计教学方式改革研究】 C++面向对象程序设计是计算机科学教育中的核心课程,旨在培养学生的面向对象编程能力,这是现代软件开发的关键技能。C++语言是面向对象程序设计的基础,它在C语言的基础上...

    软件再造:面向对象的软件再工程模式(英文版)

    ### 软件再造:面向对象的软件再工程模式 #### 概述 《软件再造:面向对象的软件再工程模式》是一本经典的重构指南,它深入探讨了面向对象技术在软件重构中的应用,旨在帮助软件开发人员和项目经理更好地理解和...

    如何从面向对象迁移到面向服务

    将面向对象的遗留系统迁移到SOA环境是一项复杂的工程,需要充分考虑系统的现状以及未来的发展方向。采用合适的方法和工具可以有效降低迁移过程中的风险和成本。通过本文提出的自下而上的服务识别方法,可以在一定...

    面向对象方法实现SQL解释器.pdf

    面向对象方法实现SQL解释器.pdf 本文主要讨论了使用面向对象方法实现SQL解释器的设计思想和实现方法。在HBASE数据库管理系统中,SQL解释器是使用面向对象方法实现的。本文以HBASE*SQL为例,介绍了在“SQL+OOP”环境...

    面向对象:对思政课网络资源课程一点看法!.docx

    ### 面向对象:对思政课网络资源课程一点看法! #### 一、思政课教师使用网络课程的基础 1. **当前网络课程的普及情况**:当前,网络课程和资源课程的数量众多,这是互联网技术发展的重要成果之一。网络课程因其...

    同学录系统面向对象分析报告

    同学录系统面向对象分析报告是一份详尽的文档,它涵盖了面向对象分析(OOA)和面向对象设计(OOD)的关键方面。这份报告的主要目的是为了理解用户需求,并基于这些需求构建一个高效、易于理解和维护的同学录系统。 ...

Global site tag (gtag.js) - Google Analytics