很现实的问题,我们项目组开始阶段出现过类似的争论。解决这样的争论,除了大家思想上统一,不然争不出结果。我也是让项目组人员从以前 面向数据库设计思想 转变到 面向对象 后,才最终解决争端。

我的想法是,从设计上来看,开始不理多少张表,先保证系统中对象关系正确反映了实际业务关系,后面考虑如何将对象映射到数据库。象你的同事一上来就是表, 那就没什么好争,争也是白争。

这几天看了一本心理学书籍《影响力》。是从我姑姑那发现的,人大版的。看完了以后感觉书很棒,自己又买了社科版的来读。书里面讲了的很多东西,比如我们日常为什么会买些自己其实不需要的东西、答应别人不合理的请求等等。这些都是哪些心里原因在起作用。
具体到我这件事情上,也是可以用这本书上的原理做一些解释的。也就是那家伙和我为什么这么对立,双方的观点无论对错,绝不更改。
以前因为不是一个项目组的,没什么交往。但是我前些天在论坛里向大家介绍了我开发的一个开源小框架“仓库猫”。这东西在公司里遭到几个人的反对,这个家伙就是其中最激烈的。他把我的框架说得一无是处。他说我这种思路老早就有了,已经过时了。然后拿出一个他自己的解决方案(他写的一个Hibernate的对象化查询的封装),表示这个才是好东西。但是我反驳到第一,他的框架从来没有见大家使用过,大家仍然在Action里用拼字符串的方式写HQL。第二,这个东西造成了Domain和这个框架的紧耦合。Domain需要继承他写的一个父类。第三,他的事务完全由其框架封死,造成一个请求如果要有多次保存和修改的话,每个都是一个单独事务。造成事务安全隐患。我这个是还没有经过实际考验,他这个是实际考验失败。所以我对他的印象变得很差。
项目开始。他因为和客户熟悉被任命为项目经理。部门经理开会宣布后,他立马拿出了他的一个大表装所有信息的数据库设计方案,和使用JSP+他的那个Hibernate封装的技术方案(业务全写在JSP中,连JSP标签都不要)。因为之前对他的印象不好(他对我的框架的评论),所以我对其提出的方案自然吹毛求疵,尽可能找问题。特别是他的问题大得厉害。
这样,我就提出我的设计方案和技术方案。我的提议是按照领域模型、对象化设计。框架上采用传统的SSH结构(稍微有所变化,变成了SpringMVC+Spring+JPA[Hibernate的实现])。这也是考虑到实际情况,其他人对SSH都很熟悉,项目的可维护性要好很多。
他立马开始反对,我们针锋相对,互相把对方的方案驳得一文不值。他说我的是搞复杂化,他的简单。我说他是拿质量换简单。最后不欢而散。因为他的权利在那里,所以业务设计不得不按照他的写。但是技术方案在所有人的一致反对下,虽然没用我的SSH,也转向一个以前项目的SpringSide2结构。他受到我们的压力,不得不妥协这部分。
我觉得在这些交往中,很多心理学的东西都可以看到。
首先是喜好。人们对喜欢的对象提出的建议往往更加赞成。我们互相看对方不顺眼,遇到方案思想不同,当然对对方的方案要吹毛求疵。
然后是权威和一致性还有社会认同。人们喜欢保持一致性,所以不会轻易更改自己的观点。人们也经常盲从于权威。在这里,他是项目经理,心里就把自己摆到一个比我们普通程序员高得多的位置,感觉自己是权威。当我提出不同的意见的时候。他为了维护自己的权威,就必须反对我的意见,无论其是否正确。是为了反对而反对。他怕一旦自己的观点被我改变,那么他就将失去权威。难以命令我们。所以哪怕他知道我是对的,也要反对。业务这方面先不说。技术我的不敢说正确,但是他的绝对是错误的。为什么他还要坚持呢?他要保证自己的观点的一致性,以维护其权威。到了这个时候已经不是为了别的什么了,他怕因为自己的方案被否决,这样他就无法把自己摆在一个领导位置。而我呢,我对自己的评价也是一个“权威”。平时解决了不少同事遇到的问题,在大家心目中我的技术水平比较棒。这也就是为什么大家会一同反对他的技术方案。因为一个是我这个“权威”的意见。一个是现在开发JavaWeb,基本上都是SSH,快成“社会常识”了。他的方案不被“JavaWeb就是SSH”这个“社会常识”认同也起了很大的作用。
最后是妥协。因为他使用了权利让我们必须对其设计进行妥协(不妥协的话恐怕要辞职,去年公司效益不好,今年接项目也不怎么样,这个是今年第一个接到的),所以他也不得不对技术方案进行妥协。他嘴里虽然一直还在吹嘘其方案的好处(就是简单,但是对以后的麻烦视而不见),但是不再强行逼迫大家使用其技术方案。默许程序员回到旧项目的技术方案中去。
程序员因为平时多面对电脑,交流较少。所以在争论一些问题的时候,容易被善于使用这些心里技巧的人左右。所以我现在正在加紧阅读这方面心理学的书籍,以弥补自己的影响力。

你们两争的不是同一个问题,打个比喻:你拿了三样东西在手里,你同事说可以放在他的一个盒子里,你叫嚷:我拿的是三个啊,你同事争论:可以放在一个盒子里啊。

对象是自由的,缺省生活在内存中,当然经常会从内存中放到磁盘的数据库上,内存和数据库硬盘只是对象的活动空间不一样,这些都不会影响对象设计本身。

banq老师已经说的很明白了,一针见血,看来你学呆了

>加紧阅读这方面心理学
你不用阅读心理学,关键大家没有一个统一起点,学校学的只是皮毛,甚至不算专业,工作后大家阅历不一样,决定观点不一样。

无论从OO范式还是数据库范式,你们都存在分歧?关键是没有找到统一这两个范式理论:Evans DDD

如果大家进行一次领域建模Evans DDD学习,就不会在具体执行层面那么争执不休,用SSH不是谁流行用谁,而是由业务特点决定,由DDD来决定用什么框架,而不是由社会常识或权威来决定,由真理决定。

说真话:按照DDD设计来看,SSH不是最好的选择,Seam很不错,当然非Java的一些脚本语言也不错,不过我如果没有心理问题的话,我还是认为我的Jdon框架是最符合DDD的框架,可以从JiveJdon看出来,当然有可能有人看不出来,只能等时间换空间了。

[该贴被banq于2009-04-16 14:47修改过]

多谢大家。现在这个部分无论如何说,都快做完了。是否日后倒霉就看日后人家的需求变化了。如何设计、如何选择框架这种事情目前还是他一言堂。让他学习DDD我可没这个能力。我也知道我们选择SSH不是最好的。但是像Seam、Grails这些东西只有我平时自学了一些,别人都不会用。
《领域驱动设计》这本书我只看了一半,后来就忘到书柜里了。看来要拿出来继续读。

楼主的想法是想在这里找一些平衡么??
首先你的那个项目从你发帖到现在就做的差不多,我只能说这种项目太easy了吧。这种项目使用SSH还是他的方法我觉得差异不大,这种项目也就是比hello world难一些,难道你要还要脱了衣服,甩开膀子干??
而且就你第一个发的帖子而言,他的设计并没有错误,你是因人而设计,还是就设计论设计,希望你自己心里能明白。

也许我下意识是有找平衡的地方吧。希望大家赞同我的观点,给自己找宽心丸吃。自己苦心做的方案被人当废纸,心里当然不舒服。要是他的方案比我的高明也就罢了,偏偏在我看来是个拙劣的方案。所以发帖子的时候就带上不少发泄的感情。
因为这个是公司的项目,我在这里描述的时候多少要注意保密,所以不能把太详细的东西说出来。项目最多是算个小型系统,价钱也不高,但是这不是粗制滥造的理由。咱们开发程序,别的可以妥协,但是质量不能妥协。你现在图简单了,日后维护、修改就要吃苦头。而且现在这个东西还是半成品,只是Java的部分大部分完成,还有Flex视频部分没做呢。后面的整合、测试以及客户看到后要做多少改动都不知道。
我在项目立项的时候提议是这部分东西单给现在这家用,肯定没什么赚头。咱们把项目做好一些,争取目标单位的同行能采购。这样利润能高一些。去年公司效益不好,今年大家争取多赚一些,无论是加薪还是奖金都容易争取一些。
所以我希望能更产品化一些。他这么一图“简单”,看起来是快了,但是如果人家改的地方要多,指不定多麻烦呢。
如果卖给别家,人家万一要求多点,估计不如重新写来得快。
你说我是“就人论设计”还是"就设计论设计",可能是看我上面那个心里分析的帖子的原因把。我不是学心里学的,只是最近看了本书。因为我在辩论的时候经常说不过人家,所以看到书后就按照上面说的一些心里活动尝试分析了一下。因为以前没分析过,所以写得比较突出阴暗面,肯定也有很多错误。大家当个冷笑话丢到一边就是。
[该贴被wlmouse于2009-04-17 22:41修改过]

虽然这里是个面向对象的阵地。但我基于小项目,1:1, 这两个要素,还是赞同楼主的同事。
因为我们做的是实业,还是要多谈一些生产力的问题。

我不同意。首先采用面向对象设计并没有让开发变得更复杂。其次,使用面向对象使得开发和维护更加简单。这几天已经有人和我抱怨说把字段都放到一张表里造成字段太多,有时候搞不清楚哪个是哪部分的。看来他的主意并没有使事情变得简单。
我们要记住的是“科学技术是第一生产力”。开发是要讲科学的。就像大炼钢铁,出来的是快了,但是很多都是残次品,有什么用?现在很多开发都在说“简单”。但是这个把系统做“简单”的本事其实是非常的不简单。而我们看到的简单很多时候只不过是粗制滥造而已,是完全以牺牲质量为代价的。还洋洋得意,我多少多少天就完成了。完全没有看到日后系统的维护、需求的变化。一旦客户要进行一些变化调整,那么就是没完没了的修改。

不都说数据库已死了吗,还讨论怎么保存干什么,干脆让框架自己决定算了,要不存到XML里,省得再讨论几个表了。

usejava:
您真的很厉害.一针见血啊......佩服.

具体放一张表还是分别放和面向对象都没有什么关系。
不是一个对象必须放在一个表中的。
一个对象可以放在多个表中,一个表也可一放多个对象。

这个帖子里,我在部分回帖中写了一些不合适的话。在此要向我这位同事进行道歉。因为互相争论,心里难免有气,写帖子的时候有发泄的成分,没能完全就事论事。现在冷静下来,觉得很多话不合适,把人家说得太坏了。
所以,在此诚恳向我这位同事及广大网友道歉,希望能获得原谅。同时,建议Jdon能够提供帖子的删除和关闭功能,万一发帖后发现不对,可以删除和关闭。现在只要有回帖,就无法改动了。

说出的话 象泼出的水,就无法回头,这就是君子,君子要勇于负责任。你现在认识到了,更表示你在成长,更加君子这是不是大幸福吗?

当你有天悟出大道之后,你对人间一切都会笑为烟云.....当然,首先不要直接攻击别人,有时由事情带到人,几句正常,如果通篇不谈专业,就只有攻击别人,那我作为管理员也会删除的。


[该贴被banq于2009-05-15 14:01修改过]

多谢。以后在言论方面一定要多多注意,无论什么时候也尽量把非理性的因素排除出去。