`
lovnet
  • 浏览: 6718347 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

是什么限制了我们面向对象(的开发)

阅读更多

是什么限制了我们面向对象(的开发)

今天看到CSDN中的两个讨论贴,一个帖子在说技术经理不允许团队成员使用面向对象的方式开发程序,另外一个帖子(找不到地址了)说某个团队成员在尝试使用面向对象的方式设计和写程序,但是遭到了其它程序员的鄙视。

或许你也在郁闷,为什么跳槽了这么多公司,想学一些面向对象的开发方式,怎么弄来弄去都还是基于对象(基于面向对象框架的开发)的开发呢?我想,其中的原因可以从几个方面来说:

公司

1. 公司性质

如果公司本身就是一个面向小客户(比如制作小网站)、面向外包的小公司,或者公司并不小,但是公司的开发团队仅仅属于公司的后勤部门,开发的产品并不能给公司带来利润等等原因都可能使得开发向简单化、过程化发展。

2. 管理团队

就像前面那个网友说的,技术经理不允许面向对象开发。可能技术经理看的是项目的维护性、看的是项目的进度,而没有看到项目远期的维护性和扩展性。也可能技术经理并不反对,而他的上司是非常看重眼前利益的,技术经理也无能为力。管理团队的任何一个层次都可能会对开发模式产生影响。

项目

正因为有前面说的那些公司,导致项目往往有以下的特点:

1. 项目进度非常赶并且一个接一个。我们除了能运用成熟的开发流程、框架之外哪里还要时间思考过多的问题呢?

2. 项目的可维护性和可扩展性不重要,甚至有的项目要求就是可维护性差、可扩展性差(公司希望项目卖出去之后从客户那里获取更高的维护费用)。

3. 项目非常小,而且偏向于网站。由于网站以数据为中心、业务逻辑较少并且注重性能的特殊性,要在这样的项目中推行面向对象的开发确实是实际效果比较差的。

团队

由于公司的性质或项目的性质就导致了产生了这样的一些团队:

1. 开发人员水平参差不齐。这里的水平包括基础、经验以及学习能力。由于面向对象需要开发人员有一定时间的OO思想的积累,对于这样一个团队,即使推行了OO,不知他们之间的协作会有什么问题呢?

2. 开发人员没有良好的OO背景。有些人以前是做ASP的,有些人以前是做VB的,可能对于做ASP.NET的开发人员来说有ASPVB背景的人比较多。这样的话就会导致难以整体转化开发思想,即使转换了,代价也比较大。

3. 团队中没有对OO经验丰富的人,或者从组织结构上说,团队中并没有设计师的角色,项目经理手下都是普通“老百姓”。

4. 团队的学习气氛不好。很多团队死气沉沉,上班-下班,团队中也有很多年龄较大的程序员,要在这样的团队中推行新的开发思想确实很难。

5. 团队过于庞大。

6. 更极端的情况是,团队中所有人都是只会增删改的初级程序员,而项目经理完全不懂技术(招聘的时候只求工资低,面试只看是不是会使用控件进行增删改)。

技术

如果团队已经习惯了基于过程化的开发,那么要向面向对象开发进行转换还需要解决非常多的关键问题:

1. 持久化

关系型数据库和领域(业务对象)模型之间有比较大的差异,我们不得不依靠一些ORM框架来实现业务对象的持久化,ORM框架的性能、ORM框架的学习难度、ORM框架的可靠性都是在把框架应用到项目中需要考虑的问题。

2. 对象呈现

业务对象往往是相互关联的复杂结构,而UI往往是平面化(一维或二维)的趋向于关系型数据库一种表现方式,这个转换过程可能会很复杂,所谓的面向对象是不是没事找事把关系型数据转化为业务对象,再把业务对象格式化成UI喜欢的数据源(比如DataTable)呢?

3. 性能

前面说的2点都可能会产生性能问题。首先,表现层是否需要完整的业务对象,其次,是否需要从数据库中获取完整的业务对象。如果界面上只希望显示10K数据,而ORM框架却从数据库中获取了100K数据并且把它们都传给了表现层,是不是不太合理?如果说还引入了分布式的话,那么网络上传输的代价就会更大。从小的层次来说,面向对象本身就或多或少降低了性能。

主观原因

如果上述这些客观原因都不存在的话推行面向对象开发还有难度,那么可能还有一些主观原因存在:

1. 给自己很多不使用OO的理由。拿到项目了,总是想项目太小、进度太紧,算了这次不尝试OO了,以后遇到其它项目再来尝试吧。没有小项目的思考,怎么能遇到大项目而不慌乱呢?

2. 没有责任心。希望尽快结束项目,在项目可维护性变得很差连自己都不想维护的时候往往也是我们引咎辞职的时候。

3. 没有转换的动力。大家沉浸在一个不错的过程化开发过程中,宁可愿意把维护的工作留给新来的同事也不愿意去尝试新的开发过程。

理想的环境

你或许一直在寻觅这样一个环境:

1. 不错的公司,从事大型企业级软件的开发,有着经验丰富并且开明的项目经理。

2. 项目周期长、项目大且复杂,客户对项目的维护性和扩展性要求比较高。

3. 团队中不乏经验丰富的构架师和OO达人,团队讨论气氛良好。

4. 有完整的基于面向对象的解决方案,开发流程非常正规。

说实话在国内确实很少。很多时候,我们能看到的也仅仅是在表面上非常好,而在真正的开发过程中发生扭曲的环境。

说说我们的情况

1. 项目是为公司的产品服务的,团队的产出不会给公司带来直接利润,也不是公司的技术核心。

2. 团队不大,团队成员水平相差较大,以我为90分的话,那么团队中有20分的,也有80分的。几乎所有人都有非OO语言的背景,也可以说是由于ASP.NET而接触C#的,而不是由于C#而基础ASP.NET的,导致基本没有任何OO概念。

3. 项目都是不超过2个月的超小项目,甚至会有很多2天的“项目”(其实就是做一个页面)。项目基本都是以数据为中心的网站,而且对性能要求非常高。项目对时间要求非常苛刻,说好这个时间点连一天都不能晚。

基于这些情况,我思考了很久还是决定以一套学习曲线低的构架、流程来开发这些项目。不过,这并不是说我们永远就是过程化开发了,我会在时机成熟的时候把一套合适的面向对象开发流程推给团队(请注意这里的“时机成熟”以及“合适的”两个词)。个人认为,只要有明确的开发方式、相对成熟的开发框架,上面的3点并不能挡住我们OO的脚步(“我们”仅指我们团队),只不过,我还在寻找一个合适的切入点。

讨论

基于这些客观或主观原因(其实,往往这些原因是交错的,因为这个也就产生了那个),真正面向对象的开发(包括完善的开发流程)在国内大多数公司(包括我们公司)中难以推行,(由于快下班了,我并没有过多去思考改善的方法)请大家讨论…………(本文只是总结一下现况,并不表达过程化开发和面向对象开发的优劣)

分享到:
评论

相关推荐

    面向对象开发实践之路(Delphi版).part1.rar

    想不到是总共只能传15MB,我还以为是单个文件的限制呢(压成了4个包),看来剩下的暂时传不了了。 要这本电子书的来以下网址下载(用真实邮箱注册一个号即可)。 http://www.51leifeng.net/thread-10329-1-9.html

    基于Java面向对象程序设计课程报告.doc.doc

    基于Java面向对象程序设计课程报告 .word教育资料基于Java语言的简易坦克大战游戏设计课程报告摘 要: 本课程设计使用Java语言开发了一个简单坦克大战小游戏,主要采用面向对象程序设计 思想来完成程序的需求分析,...

    《面向对象编程与设计(Java)》课后作业及参考解答.pdf

    1/7 页 《面向对象编程与设计(Java) 》课后作业及参考解答 1.1.1 第一周 课程(9 月 4 日)的课后作业及参考解答 1、 请用 Java 程序示例说明什么是面向过程的程序设计方法、什么是面向对象的程序 设计方法?...

    【Java】面向对象的课程设计——学生管理系统(增、删、查、找)

    能学到什么: ① 做系统的基本框架与思路 ② 功能模块化,后集体调用,方便后期管理 ③ 代码的规范使用 阅读建议: ①可以打开自己的编软件进行手动写入(我的时IntelliJ IDEA 2021.3.3) ②进行写代码之前可以,先...

    面向对象的电子商务系统设计.ppt

    UML还突破了软件的限制,广泛吸收了其他领域的建模方法,并根据建模的一般原理,结合了软件的特点,因此具有坚实的理论基础和广泛性。UML不仅可以用于软件建模,还可以用于其他领域的建模工作。 [1] UML立足于对...

    C++ 面向对象教程 21 courses#

    2.6 什么是对象 34 2.7 抽象数据类型 35 2.8 对象细节 35 2.9 头文件形式 36 2.10 嵌套结构 37 2.11 小结 41 2.12 练习 41 第3章 隐藏实现 42 3.1 设置限制 42 3.2 C++的存取控制 42 3.3 友元 44 3.3.1 嵌套友元 45 ...

    从模式讲到设计模式再到面向对象设计模式

    “面向对象设计模式”是可复用面向对象软件的基础。三者的基本描述如下: 1、每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案。 2、设计模式描述了软件开发过程中某一类常见问题的一般性...

    面向对象编程 利用C++实现图书管理系统

    1、 设计要点:开发一个“绘本之家”信息管理系统,分为三大管理模块,综合查询模块和统计分析模块。 2、 功能要求: (1) 绘本资料的管理 绘本信息包括:绘本编号、绘本名、作者、出版社、出版时间、价格、语言、...

    客客威客系统KPPW v2.5 GBK Beta.zip

    新版本程序结构深入改造,面向对象MVC设计模式,模块化挂接。减少重复造轮子,增加了代码的重用性,需要的时可以安装这个模块,不需要时可以卸载这个模块。 用户经验权限体系改造更体贴 新版本重构了用户经验权限...

    SAD上机实验

    面向对象的系统分析和设计是将面向对象的方法运用到软件工程的分析设计阶段。面向对象的系统分析和设计的主要目的是完成对某个特定应用论域(application domain)的分析和系统的建模。应完成的主要工作是描述系统中...

    关于计算机数据库系统设计方案.doc

    关于计算机数据库系统设计方案 摘要:下文主要根据笔者多年工作经验就关于计算机数据库系统设计方案进行了论述 ,针对数据库应用开发工具来证明其能够支持面向对象的开发方法,并提高相应的开发 手段。仅供同行参考...

    系统分析与设计课件

    面向对象的系统分析和设计是将面向对象的方法运用到软件工程的分析设计阶段。面向对象的系统分析和设计的主要目的是完成对某个特定应用论域(application domain)的分析和系统的建模。应完成的主要工作是描述系统中...

    UML课程设计—图书管理系统.docx

    使用面向对象的工具来构建系统,就应该使用面向对象的软件工程方法。然而,我们经常会发现,在实际的开发过程中,很多开发人员虽然能够理解UML的所有图形,却仍然不能得心应手的使用UML来构建整个项目,其很大的...

    面向对象课程设计报告-绘本之家(用c++实现图书管理系统)

    1、 设计要点:开发一个“绘本之家”信息管理系统,分为三大管理模块,综合查询模块和统计分析模块。 2、 功能要求: (1) 绘本资料的管理 绘本信息包括:绘本编号、绘本名、作者、出版社、出版时间、价格、语言、...

    软工总复习真情奉献V1[1].4 正式版

    2. 四种开发方法:面向过程的方法,面向对象的方法,面向数据的方法,形式化方法 3. 五个面向理论:面向流程分析,面向数据设计,面向对象实现,面向功能测试,面向过程管理 4. 三个建模模型:功能模型,业务模型,...

    Java开发手册(阿里巴巴).docx

    次年,发布 36 万字的配套详解图书《码出高效》,本书 秉持“图胜于表,表胜于言”的理念,深入浅出地将计算机基础、面向对象思想、JVM 探源、数据 结构与集合、并发与多线程、单元测试等知识客观、立体地呈现出来。...

    开发团队调度系统.zip

    对于要加入 软件开发团队 中的人,除了总人数设置的有限制之外,还要求:最多有3个程序员(programmer),最多有2个设计师(designer),最多有1个架构师(architect),并且不能有普通员工(employee)。...

    nullbank:该项目是为面向对象的设计和实现学科而开发的,旨在遵循MVC II,Front Controller和Command标准,为Webm执行CRUD操作和用户会话控制的系统。

    空库介绍该项目是为面向对象的设计和实现学科而开发的,该学科旨在开发一个遵循MVC II,Front Controller和Command标准对Web执行CRUD操作和用户会话控制的系统。 该项目将不涉及与安全性或银行系统进行通信的方式...

    ReportAll报表开发工具2.0(免费)

    ReportAll是面向软件开发人员的报表开发工具,具有全新的设计思想,将“对象摆放”类和“电子表格”类报表开发工具完美融合,使用种类丰富且功能强大的报表对象组合生成任意复杂的报表样式。在ReportAll中,无论是...

Global site tag (gtag.js) - Google Analytics