OO能在中国中小型软件企业中生存吗?

我从事几年的面向数据库设计,做过几个大项目,可以说是经验丰富,最近终于有机会能使用DDD思想来做一个新的项目,前几天完成了项目开发,做完这个项目后让我非常之喜欢OO,DDD.
使用OO进行设计,通过对象来建立系统的模型更符合人的逻辑思维,对象思想非常贴近现实,通过对象来理解系统更有意义;而使用面向数据库设计,必须通过数据库表来表达系统,数据库表虽然也能表达业务模型,不能生动的表达现实的业务意义,主要表达业务数据意义,通过数据库表理解系统比较困难。
使用OO进行编程,程序代码更加优雅、更具有生命力,面向对象编写出来的程序,展现对象之间的协作,很生动。而使用面向过程编写程序代码,枯燥乏味,是顺序的代码,而且同事伴随着大量的if else 条件语句去表达业务逻辑。
总之我喜欢OO,喜欢DDD. 然而在前几天公司内部的项目总结会上,我的观点受到部门经理和其他项目人员的质疑,部门经理提出以下几点:
1。面向数据库设计,一样能做出很好的设计,好的设计人员设计出来的表结构和你用面向对象设计后的表结构差不多。
2。面向对象,不能提高开发效率,反而增加开发人员和设计人员的要求,增加公司得人力资源成本。
3。面向对象编写的程序,以后换个人维护,很难维护啊,要求维护人员必须懂面向对象,这无疑提高人员的要求,公司以后招人要求要更高。
4。面向对象编写的程序,看不见出哪里比面向数据库设计好多少啊。

面对这几个问题,任我如何解释,说到口水都干了都没有用。本来希望能将OO得经验在公司推广开,没想到会是这样。开会最后,部门经理说现在公司不关心什么OO, 关心的是低的开发成本,使用OO会给公司带来一定人员的要求,这会加重公司的成本,使用传统面向数据库设计,面向过程编程,随便招个新人,了解业务就可以维护代码。
听了这些话后,我心情很低落,难道OO根本不是中国中小型软件企业的解决目前软件维护成本高的良药吗?如果是这样,那中国有多少个软件企业是使用OOD,OOP呢?

Jdon这么多OO的高手,有没有能人介绍下广州有那几家软件公司是真正在使用OO做项目。最近想跳槽,也可以有跳槽的方向。
我们公司的好几个同联盟的公司,都和我们公司的情况类似。我真不相信难道广州的公司都是这样?

1)面向对象与面向数据库,根本不冲突。不同层面,一个是秦琼,一个是关公,没法打起来。
2)同样,OO也不排斥if-else。正如过去的结构化,也不排斥goto。对OO,要正确理解,还需知道它仍处于发展阶段。
3)部门经理当然关心成本。每个部门经理都不关心成本,那公司迟早关门大吉。OO是你编码员关心的事。你尽管OO好了,这个不用请示的。OO的目的之一,就是为了降低开发成本。你觉得自己的OO升高了成本,那是你没OO好,需要重新学习OO思想。
恕我直言。
[该贴被beepbug于2009-05-08 08:12修改过]

楼上说的非常正确

在JDON里潜水看人家的言论很久了。终于忍不住想说两句。
你在算公司管理层吗?如果不是那情有可缘,我能理解。但你如果是,则你不是合格的管理层,迟早会下岗的。因为公司的根本是赚钱,不是说OO好不好的问题,而是它能不能降低成本的问题。你认为不合适,赶快跳啊。

其实在很多公司里都面临着同样的尴尬,我也同样遇到过同样的尴尬的局面.在一个铁打的营盘里,一个或者几个人想要向整个部门
推广OO非常困难.要是从公司的高层往下推就容易多了,公司就要OO的人,适者生存,不适应或者不愿意改变就走人.这样就容易多了.
所以公司技术领头人的思维非常重要,他决定公司技术的发展方向.
另外最起码我们自己负责的那一块还是可以用OO设计来实现的,坚持自己所坚持的!
还有一种途径就是将自己的职位提升到更高的高度,这样你说出的话就不再人微言轻,就有一定的影响力,你就可以影响更大的范围,
最起码是你领导的范围.呵呵!

顺便说下,在中国去哪个公司都一个样。有些东西是很难改掉的。除非它省钱。

要牢记一点,你开发的系统是为公司挣钱的,要在满足用户的需求的前提下,降低成本。但是用户的需求一般是业务需求,不会关心你用什么技术。

再说OO未必就会降低维护成本。

部门经理提的问题很好,你是在做挣钱的工作,不是搞科研。目的不同,手段也不同。

to beepbug :
我可没有排斥面向数据库,只是面向对象更符合人的思维,至少我在实践中感觉面向对象更有意思.
OO肯定不会排斥if else ,但是平常为实现某些业务而使用的if else,使用合理的对象抽象和设计模式就不需要这些if else. 当业务复杂的时候,经常会出现非常多的if else条件,让代码比较难理解.
OO理论上能减低成本,但是在目前中小型公司里面的开发人员,要有多少能OOP呢?我这个项目组的2个开发人员,我要花很大精力让他们去理解OO, 去OOP.我们公司开发人员都习惯了面向过程编程,习惯一个方法表达所有业务逻辑.而且现在要公司招OOP的程序员不容易啊。 就算你OOD好了,那最终还是需要有人OOP啊.

to greentree :
同感.我现在是项目负责人,我只能控制到我的项目.还好项目如期完成,并且经过功能测试、性能测试都很正常.我们项目组的开发人员也都感觉这个项目比公司其他项目质量更好,因为系统容易理解,容易进行单元测试,也非常容易调试. 我们公司已经习惯了传统的项目开发,看样子是不会接受我的建议.

to huluhulu88 :
非管理层, 我只是项目经理..


[该贴被BinnyJ于2009-05-08 11:46修改过]

OO是否能降低维护成本?

我们公司最担心的就是,使用OO提高对开发人员的要求,今天听老板说,招个便宜好用的人难啊.如果招个人还要求会OOP,那是不是工资要加多点呢?

无奈,现在很多中小型的公司现状就是这样。有的是意识到了OO,受制于人力的成本,有的是根本没意识到。

OO的作用就是节省本,提高生产效率,否则根本就没有研究的意义。这个跟老板的意志是相同的。老板只是想达到这种效果,可是并不知道怎样做,因为老板一般不懂技术,他能想到的就是不要提高工资,要让程序员多加班。而你要能够明白的告诉老板,其实还有其他的方法,比如我现在用的这种,表面上我好像在开发的时候时间花的差不多,但是你会发现客户让我改点什么我特别快,以后别的项目开发的时候我的速度也可以提高很快。这样才能突出你的价值,否则他很容易找一个市场上更加便宜的程序员替换掉你。

呵呵,这也不是某些公司,我觉得是由国内的大环境造成的,软件行业的很多概念都是从国外到国内传播,过程化编程传播到国内的时间早,国内接受的人也多,习惯的人更多,而OOP,OOD传播比较晚,相对接受的人也较少,我相信这只是时间问题,OOP,OOD在维护,适应需求变更方面远好于过程性编程。

其实也许还有一个原因,就是很多人都不想去学习新的东西,自己都做了很多年的东西,也有经验,也有很多积累,为什么学个新的东西,还得不断的去尝试,去实践,而公司的项目不可能实践的,只能采用大家都熟悉的方式,不然实践失败了,项目失败了,谁负责。

To 楼主:
你没看明白我的话。

>>>我可没有排斥面向数据库,只是面向对象更符合人的思维,至少我在实践中感觉面向对象更有意思.
我没反对你去“排斥面向数据库”,只是觉得不能把这两者对立起来。我以为,把这两者对立起来的人,既没真正了解面向数据库,也没真正了解面向对象。

>>>OO肯定不会排斥if else ,但是平常为实现某些业务而使用的if else,使用合理的对象抽象和设计模式就不需要这些if else. 当业务复杂的时候,经常会出现非常多的if else条件,让代码比较难理解.
如果有太多的if-else,那说明算法需改进。你别信banq说的,他没弄清楚算法到底是什么,就闭着眼睛反算法。我看到许多BBS里有许多高人,用OO去替代if-else,我只能说,这才是真正的走火入魔。不是这样OOD的,也不是这样OOP的。if-else是鸡,OO是牛刀,用牛刀杀鸡,让人笑话。

>>>我这个项目组的2个开发人员,我要花很大精力让他们去理解OO, 去OOP.我们公司开发人员都习惯了面向过程编程,习惯一个方法表达所有业务逻辑.而且现在要公司招OOP的程序员不容易啊。 就算你OOD好了,那最终还是需要有人OOP啊.
首先是自己学好OO。自己真正掌握了OO,而且是切合实际的,不是空谈的,对人家说话才有说服力。
光说,还是没用。你得自己做OO,拿出真正可读性、可维护性好、重用性好的代码出来,别人也不是傻瓜,看见好的,自然跟你学。