关于企业开发的一些疑义

关于企业开发的一些疑问

     每当我向Boss推荐使用轻量级J2EE的解决方案时,总是遭遇一些质疑,包括对于开源软件的质疑,关于OO的质疑,等等。想看看大家的看法,不要讲理论。

   1、到底有多少企业级开发在用EJB?

   2、为什么不使用分布式架构,不支持多种客户端,依然需要使用EJB

   3、企业级开发中是否真的都不使用开源框架和产品

   4、成熟的开源框架和产品与商业软件和产品相比哪个更可靠?

   5、WebLogic和开源框架(特别是Springframework和Hibernate)进行整合是很不专业的做法吗?

   6、使用Hibernate替代Entity Bean是很不专业的做法吗?

   7、选择商业软件方案是宗教信仰吗?

   8、国内使用OO技术的情况到底怎样?OO本来不就是来做复杂大系统的吗?为什么国内的某些专家却声称OO只适合小项目

4 楼 sslaowan 2007-10-06  
lighter 写道
   1、到底有多少企业级开发在用EJB?
      我是做银行软件的,暂时还没有做过EJB的项目

   是做什么样的系统呢?复杂不?
 
lighter 写道
 
   6、使用Hibernate替代Entity Bean是很不专业的做法吗?
      专业是什么概念??

   专业就是那种使用Dreamweaver做网页就是比FrontPage专业的感觉~~关于企业开发的一些疑义 有架构师说Entity Bean就是ORM,为什么还要引入Hibernate,岂不是很不专业?

lighter 写道
    8、国内使用OO技术的情况到底怎样?OO本来不就是来做复杂大系统的吗?为什么国内的某些专家却声称OO只适合小项目
      OO水平低下的我没有发言权

   你们做得系统复杂不?也不用OO?是用结构化。我知道铁道部某些复杂的系统都是使用结构化方法,据说维护起来一团糟,可是为什么大家都不用OO呢?
5 楼 sslaowan 2007-10-07  
   我觉得如今的大学对于OO的教育太少了,他们把结构化方法当作基础,然后不断的重复结构化方法,按照我的想法,应该大一的时候讲结构化,大二的时候讲基于对象,大三的时候讲面向对象,大四的时候实践面向对象。
    我不太清楚清华北大哈工大这样的国内领先的计算机软件学院对于OO的教学,但至少在我们学校(211院校)这方面的教学非常差。大家都号称懂OO,可是对于OO的发展历史,那些里程碑意义的书籍都没读过。
    有些问题明显可以用OO很好的来解决,可是说服管理者我们使用OO技术真的是非常困难,不知道大多数的公司都是怎么做的,特别是做企业信息系统的公司
6 楼 yeshucheng 2007-10-07  
lz你的大学还好,还讲了面向对象。其实很多大学这门课就是一门选修课程。国内很多大学教学基本都一样,不过国外课程搭配也差不多。但是两者的大环境不一样。
7 楼 yeshucheng 2007-10-07  
为什么我们Boss问的一些架构师都说肯定要用EJB,毕竟是标准,而且是大厂商来支持的。好像听上去如果不用就感觉没水平。
回答:这个理论上来说就是你们公司的一个噱头!

我们以前没用过EJB,大家都是用JSP+Servlet+JavaBean或者Struts的方式。所以不存在沿用以前技术的问题。
看Rod Johnson的J2EE Without EJB中讲现在唯一需要使用EJB的动机就是支持分布式系统,而使用分布式很大一部分原因是因为为了满足多种表现层技术。很多方案我看使用Entity Bean实际上都是使用了Home接口,根本没用到分布式啊。而且Web服务器和应用服务器都在一台物理的机器,为什么要用EJB呢?
回答:这个我觉得还是和你们的技术负责人有很大关系。

Boss就是说跟客户一说我们使用的都是开源产品,实际上Boss认为开源产品关键在于免费,我们这么大的项目用免费的东西就不好!您所谓硬件设备是什么意思呢?是开源的比商业的对硬件要求低?
回答:又回到第一个回答了,还是噱头!你们的BOSS怕一旦说出开源就是没有多少钱可以“骗”。如果使用WEBLOGIC这样的中间件,你知道它真正的价格吗?你觉得接下来的硬件设备你知道真正的价格和回扣多少吗?

关键是实际情况。我用了两个多月的开源产品,发现最好的一点就是可以看到源代码,有些API文档语焉不详的地方,我看看源代码就知道细节了。而且我觉得一旦发现Bug可以直接去修改源代码啊。以前用Delphi控件,发现控件有Bug,改不了啊,郁闷啊。这是不是证明开源更可靠呢?
还有我们现在在研究BEA的产品线,发现资料实在太少了,这是不是意味着万一有问题就要请BEA的专家了,这岂不是成本巨大啊。
回答:这个老板会考虑,不在你考虑范围!

有个资深架构师跟我们技术头说的,WebLogic和Spring、Hibernate这样的开源免费的框架放在一起就是不伦不类,好比赛车配了个奥拓的*。
回答:说这个话的人应该不是真正的所谓架构师,也是一种很不负责的言语。

那为什么会出现不假思索就选择商业产品的现象呢?
回答:我相信这个还是你们技术负责人考虑更多的“圈钱”

能举出使用OO技术构建的大型系统吗?如ERP,银行项目之类的
回答:我接触过税务系统




8 楼 gigix 2007-10-07  
sslaowan 写道
   我觉得如今的大学对于OO的教育太少了,他们把结构化方法当作基础,然后不断的重复结构化方法,按照我的想法,应该大一的时候讲结构化,大二的时候讲基于对象,大三的时候讲面向对象,大四的时候实践面向对象。
    我不太清楚清华北大哈工大这样的国内领先的计算机软件学院对于OO的教学,但至少在我们学校(211院校)这方面的教学非常差。大家都号称懂OO,可是对于OO的发展历史,那些里程碑意义的书籍都没读过。
    有些问题明显可以用OO很好的来解决,可是说服管理者我们使用OO技术真的是非常困难,不知道大多数的公司都是怎么做的,特别是做企业信息系统的公司

请问
“面向对象”和“结构化”的区别是什么?
9 楼 sslaowan 2007-10-07  
gigix 写道
sslaowan 写道
   我觉得如今的大学对于OO的教育太少了,他们把结构化方法当作基础,然后不断的重复结构化方法,按照我的想法,应该大一的时候讲结构化,大二的时候讲基于对象,大三的时候讲面向对象,大四的时候实践面向对象。
    我不太清楚清华北大哈工大这样的国内领先的计算机软件学院对于OO的教学,但至少在我们学校(211院校)这方面的教学非常差。大家都号称懂OO,可是对于OO的发展历史,那些里程碑意义的书籍都没读过。
    有些问题明显可以用OO很好的来解决,可是说服管理者我们使用OO技术真的是非常困难,不知道大多数的公司都是怎么做的,特别是做企业信息系统的公司

请问
“面向对象”和“结构化”的区别是什么?

    本质上来讲,程序分为数据和操作两部分,结构化范型(或者说面向过程)是将其分开对待,而面向对象范型是将其封装在一起来对待。也就是说在结构化范型中更加倾向于先定义数据结构,然后考虑施加于这些数据结构的算法;而OO则倾向于先考虑行为。考虑结构体和类的区别,我觉得关键在于后者包括操作。
    在【WW89】中指出在OO设计中先考虑数据结构会破坏封装,因此提倡RDD。一般的大学教程都说结构化是面向过程建模,而OO是面向对象(过程中的领域概念)建模。我觉得从结构化到OO对于整个思考世界的方式发生了变化,“对象是对象世界中享有责任的一员”【WM02】
    我看过很多教材上写一个纯稚数据类【Fowler99】,然后写一个全是方法的Bean,我觉得这不是OOD。对象是要包括属性,状态和方法的。

    从发展历程上来看,结构化方法【Yourdon78】到面向数据结构的方法到日立方法到OO,就可以看出来其不同。另外C++ Primer那本书从技术实现的角度来区分了两种开发范型。

    这是我对于两者区别的认识,本科毕业论文写的OOD,因此做了大量研究,如有不对的地方,还请gigix多多指教~
10 楼 sslaowan 2007-10-07  
yeshucheng 写道
为什么我们Boss问的一些架构师都说肯定要用EJB,毕竟是标准,而且是大厂商来支持的。好像听上去如果不用就感觉没水平。
回答:这个理论上来说就是你们公司的一个噱头!

我们以前没用过EJB,大家都是用JSP+Servlet+JavaBean或者Struts的方式。所以不存在沿用以前技术的问题。
看Rod Johnson的J2EE Without EJB中讲现在唯一需要使用EJB的动机就是支持分布式系统,而使用分布式很大一部分原因是因为为了满足多种表现层技术。很多方案我看使用Entity Bean实际上都是使用了Home接口,根本没用到分布式啊。而且Web服务器和应用服务器都在一台物理的机器,为什么要用EJB呢?
回答:这个我觉得还是和你们的技术负责人有很大关系。

Boss就是说跟客户一说我们使用的都是开源产品,实际上Boss认为开源产品关键在于免费,我们这么大的项目用免费的东西就不好!您所谓硬件设备是什么意思呢?是开源的比商业的对硬件要求低?
回答:又回到第一个回答了,还是噱头!你们的BOSS怕一旦说出开源就是没有多少钱可以“骗”。如果使用WEBLOGIC这样的中间件,你知道它真正的价格吗?你觉得接下来的硬件设备你知道真正的价格和回扣多少吗?

关键是实际情况。我用了两个多月的开源产品,发现最好的一点就是可以看到源代码,有些API文档语焉不详的地方,我看看源代码就知道细节了。而且我觉得一旦发现Bug可以直接去修改源代码啊。以前用Delphi控件,发现控件有Bug,改不了啊,郁闷啊。这是不是证明开源更可靠呢?
还有我们现在在研究BEA的产品线,发现资料实在太少了,这是不是意味着万一有问题就要请BEA的专家了,这岂不是成本巨大啊。
回答:这个老板会考虑,不在你考虑范围!

有个资深架构师跟我们技术头说的,WebLogic和Spring、Hibernate这样的开源免费的框架放在一起就是不伦不类,好比赛车配了个奥拓的*。
回答:说这个话的人应该不是真正的所谓架构师,也是一种很不负责的言语。

那为什么会出现不假思索就选择商业产品的现象呢?
回答:我相信这个还是你们技术负责人考虑更多的“圈钱”

能举出使用OO技术构建的大型系统吗?如ERP,银行项目之类的
回答:我接触过税务系统





    不得不说,在技术选型上,有很多非技术因素混杂其中,其实您的大多数回答概况而言就是,考虑使用某种产品或技术的首要原因是哪种技术能够更好的“圈钱”,而并不是考虑哪种技术对于实现更加有用。
     我想知道的是,是不是现在很多选用商业产品或者重型J2EE技术的公司都是基于这种想法呢?
     另外,是不是很多公司都会选择重型方案而非轻型方案呢?
11 楼 downpour 2007-10-07  
这种讨论毫无意义。

请楼主先用一段程序来给大家解释一下,什么样的代码是OO的,什么样的代码是结构化的,我们再来继续进行讨论。
12 楼 timerri 2007-10-07  
sslaowan 写道
   我觉得如今的大学对于OO的教育太少了,他们把结构化方法当作基础,然后不断的重复结构化方法,按照我的想法,应该大一的时候讲结构化,大二的时候讲基于对象,大三的时候讲面向对象,大四的时候实践面向对象。
    我不太清楚清华北大哈工大这样的国内领先的计算机软件学院对于OO的教学,但至少在我们学校(211院校)这方面的教学非常差。大家都号称懂OO,可是对于OO的发展历史,那些里程碑意义的书籍都没读过。
    有些问题明显可以用OO很好的来解决,可是说服管理者我们使用OO技术真的是非常困难,不知道大多数的公司都是怎么做的,特别是做企业信息系统的公司


oo在软件中的地位远没有那么高....如果4年有3年都是学oo过来的,我很怀疑他能不能真正适合工作。

传统的面向过程编程,通俗来说就是让人模拟计算机的方式进行思考(这里指冯诺依曼结构,其他的结构有不同思考方式如DSP的哈佛结构)。而面向对象的编程,是让计算机来模拟人的思考方式。

面向对象当然好,他让人们能够更容易的理解程序,使程序开发越来越简单,但是,计算机还是会把oo的东西转化为面向过程的东西然后再进行处理。如果仅仅强调oo而不在意计算机的处理方式的话,是不可能写好程序的。更何况,即使我们使用oo思考问题,在很多时候还是要自己转化为面向过程的思考方式去思考(如:线程同步,内存优化等)。

所以说,面向过程的思考方式,才是真正应该在大学阶段打下坚实的基础的。否则,oo只会是空中楼阁。

一般来说,在对运行性能要求比较高的项目中,会主要以面向过程的方式来思考,而对于需求易变,开发时间紧,结构复杂的项目,大多使用oo进行开发。

如果习惯于面向过程开发,不使用oo也不会使开发效率降低,但如果团队里都是新手,oo可能是更好的选择。
13 楼 gigix 2007-10-07  
sslaowan 写道
    本质上来讲,程序分为数据和操作两部分,结构化范型(或者说面向过程)是将其分开对待,而面向对象范型是将其封装在一起来对待。也就是说在结构化范型中更加倾向于先定义数据结构,然后考虑施加于这些数据结构的算法;而OO则倾向于先考虑行为。考虑结构体和类的区别,我觉得关键在于后者包括操作。
    在【WW89】中指出在OO设计中先考虑数据结构会破坏封装,因此提倡RDD。一般的大学教程都说结构化是面向过程建模,而OO是面向对象(过程中的领域概念)建模。我觉得从结构化到OO对于整个思考世界的方式发生了变化,“对象是对象世界中享有责任的一员”【WM02】
    我看过很多教材上写一个纯稚数据类【Fowler99】,然后写一个全是方法的Bean,我觉得这不是OOD。对象是要包括属性,状态和方法的。

    从发展历程上来看,结构化方法【Yourdon78】到面向数据结构的方法到日立方法到OO,就可以看出来其不同。另外C++ Primer那本书从技术实现的角度来区分了两种开发范型。

    这是我对于两者区别的认识,本科毕业论文写的OOD,因此做了大量研究,如有不对的地方,还请gigix多多指教~

这些东西都是早有定论,没什么可指教的。自己去读MIT的编程入门教材,缩写叫SICP的那本。
14 楼 sslaowan 2007-10-07  
downpour 写道
这种讨论毫无意义。

请楼主先用一段程序来给大家解释一下,什么样的代码是OO的,什么样的代码是结构化的,我们再来继续进行讨论。

  
   这个帖子主要讨论OO在公司中的应用情况和为什么会出现这样的情况。但是接着这个帖子来讨论一下其他的问题也不错,请各位多多指教。
   转帐的例子,编的比较匆忙,关键在于解释面向过程与面向对象:
package edu.demo.domain;

import junit.framework.TestCase;

public class AccountTest extends TestCase {

	protected void setUp() throws Exception {
		super.setUp();
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}
	//OO 
	public void testAccountTransfer(){
		Account send=new Account("1",1000);
		Account recv=new Account("2",1500);
		
		send.debit(500);
		recv.credit(500);
		
		assertEquals(500,send.getBalance());
		assertEquals(2000,recv.getBalance());
					
	}
	//结构化程序,面向过程
	public void testAccountTransferForStruct(){
		AccountDAO accountDAO=new MockAccountDAO();
		long balanceOfSend=accountDAO.getAccountBalance("1");
		assertEquals(1000,balanceOfSend);
		long balanceOfRecv=accountDAO.getAccountBalance("2");
		assertEquals(1500,balanceOfRecv);
		balanceOfSend-=500;
		balanceOfRecv+=500;
		accountDAO.updateAccountBalance("1",balanceOfSend);
		accountDAO.updateAccountBalance("2",balanceOfRecv);
		
		assertEquals(500,accountDAO.getAccountBalance("1"));
		assertEquals(2000,accountDAO.getAccountBalance("2"));
		
	}
	
	

}

   在这里主要是通过测试用例来展示OO中对象的行为,结构化程序中如何面向过程建模
15 楼 sslaowan 2007-10-07  
gigix 写道
sslaowan 写道
    本质上来讲,程序分为数据和操作两部分,结构化范型(或者说面向过程)是将其分开对待,而面向对象范型是将其封装在一起来对待。也就是说在结构化范型中更加倾向于先定义数据结构,然后考虑施加于这些数据结构的算法;而OO则倾向于先考虑行为。考虑结构体和类的区别,我觉得关键在于后者包括操作。
    在【WW89】中指出在OO设计中先考虑数据结构会破坏封装,因此提倡RDD。一般的大学教程都说结构化是面向过程建模,而OO是面向对象(过程中的领域概念)建模。我觉得从结构化到OO对于整个思考世界的方式发生了变化,“对象是对象世界中享有责任的一员”【WM02】
    我看过很多教材上写一个纯稚数据类【Fowler99】,然后写一个全是方法的Bean,我觉得这不是OOD。对象是要包括属性,状态和方法的。

    从发展历程上来看,结构化方法【Yourdon78】到面向数据结构的方法到日立方法到OO,就可以看出来其不同。另外C++ Primer那本书从技术实现的角度来区分了两种开发范型。

    这是我对于两者区别的认识,本科毕业论文写的OOD,因此做了大量研究,如有不对的地方,还请gigix多多指教~

这些东西都是早有定论,没什么可指教的。自己去读MIT的编程入门教材,缩写叫SICP的那本。


    说到指教,因为是您提出的问题,我不知道我的回答是不是正确,所以说指教嘛。好的,我去看看那本书。
16 楼 sslaowan 2007-10-07  
timerri 写道
sslaowan 写道
   我觉得如今的大学对于OO的教育太少了,他们把结构化方法当作基础,然后不断的重复结构化方法,按照我的想法,应该大一的时候讲结构化,大二的时候讲基于对象,大三的时候讲面向对象,大四的时候实践面向对象。
    我不太清楚清华北大哈工大这样的国内领先的计算机软件学院对于OO的教学,但至少在我们学校(211院校)这方面的教学非常差。大家都号称懂OO,可是对于OO的发展历史,那些里程碑意义的书籍都没读过。
    有些问题明显可以用OO很好的来解决,可是说服管理者我们使用OO技术真的是非常困难,不知道大多数的公司都是怎么做的,特别是做企业信息系统的公司


oo在软件中的地位远没有那么高....如果4年有3年都是学oo过来的,我很怀疑他能不能真正适合工作。

传统的面向过程编程,通俗来说就是让人模拟计算机的方式进行思考(这里指冯诺依曼结构,其他的结构有不同思考方式如DSP的哈佛结构)。而面向对象的编程,是让计算机来模拟人的思考方式。

面向对象当然好,他让人们能够更容易的理解程序,使程序开发越来越简单,但是,计算机还是会把oo的东西转化为面向过程的东西然后再进行处理。如果仅仅强调oo而不在意计算机的处理方式的话,是不可能写好程序的。更何况,即使我们使用oo思考问题,在很多时候还是要自己转化为面向过程的思考方式去思考(如:线程同步,内存优化等)。

所以说,面向过程的思考方式,才是真正应该在大学阶段打下坚实的基础的。否则,oo只会是空中楼阁。

一般来说,在对运行性能要求比较高的项目中,会主要以面向过程的方式来思考,而对于需求易变,开发时间紧,结构复杂的项目,大多使用oo进行开发。

如果习惯于面向过程开发,不使用oo也不会使开发效率降低,但如果团队里都是新手,oo可能是更好的选择。

   结构化方法是一种开发范型,貌似和计算机思考的方式没什么关系吧(http://blog.sina.com.cn/s/blog_48bc7aa9010009ab.html,随便找的一篇文章,不见得多权威)。至于转化成计算能懂得方式应该是编译器要做得事情吧。程序在内存里数据和操作是分开的,那和在源文件中是不是分开的有关系吗? Core Java。VolumeI,和Code Complete里都说面向过程的方法主要强调分析问题时按照从上到下,逐步求精的方式,而面向对象是先从系统中找到对象。因此我觉得OO才是更正常的思维,Yourdon于1978年写成的结构化分析与设计那本书,1982年和Coad合作创立了OOAD方法,从我的研究来看OO已经不断发展了近30年,而面向过程方法呢?
  
   OO肯定不是万能的,所以我只是问:
 
sslaowan 写道
  有些问题明显可以用OO很好的来解决,可是说服管理者我们使用OO技术真的是非常困难,不知道大多数的公司都是怎么做的,特别是做企业信息系统的公司


   可能讨论的有点乱,应该将SA SD SP和OOA OOD OOP分开来分析。
  
17 楼 tommywu 2007-10-07  
我做过sales,我来告诉lz关于bea价格方面,通常来说,卖一个bea产品, 集成商或者开发商会有10%的利润,而用开源,可能用户不会买这个帐, 呵呵。对于中型小型公司而言,技术永远不是最重要的,挣钱第一位。 呵呵。
18 楼 sslaowan 2007-10-07  
tommywu 写道
我做过sales,我来告诉lz关于bea价格方面,通常来说,卖一个bea产品, 集成商或者开发商会有10%的利润,而用开源,可能用户不会买这个帐, 呵呵。对于中型小型公司而言,技术永远不是最重要的,挣钱第一位。 呵呵。

  那甲方应该知道这些吧,那他们为什么也希望用这些呢?莫非是BEA给乙方回扣,乙方在给甲方回扣?大家这叫共赢?哈哈~
19 楼 tommywu 2007-10-07  
你看看大的甲方都是哪些甲方?  银行?*? 石油? 都是富裕的一塌糊涂的地方,他们最怕什么?最怕承担责任,用了bea的东西出了问题,他们可以说,啊用了最先进的东西都这样,那我也没办法。 如果他们用了开源,出了问题,相关责任人第一个倒霉。 而且一个大项目,甲方的责任人都是各个厂商的重点攻关对象,呵呵,里面有很多灰色操作,前些年不是一波一波的进人么。 所以啦,国内没有技术积累就是这个问题。
20 楼 tommywu 2007-10-07  
没有技术积累也是西方愿意看到的,当初就是这样肢解soviet union的。 楼主有兴趣,可以看看“一个经济杀手的自白”这样的书, 而真正注重实用的民营经济体,很少会去用豪华性的平台。
21 楼 tommywu 2007-10-07  
如果从历史角度来讲,我们现在的所谓IT,其实都是美国60年代“曼哈顿计划”的副产品,当年美国就是靠这个拖跨了前苏联,然后,利用货币垄断权,让自己老百姓举债,让全世界来为自己的发展买单。最近有本“货币战争”的书很火啊,楼主可以看看
22 楼 sslaowan 2007-10-08  
To tommywu:
   受教不少~所以我觉得企业开发中的某些说法简直就是一本厚黑学。
   不过我发此帖的目的也就在于希望大家能说说到底在选型时考虑的因素是什么。

   ps:我听说有个韩剧叫钱的战争啊~
23 楼 yeshucheng 2007-10-08  
sslaowan 写道
tommywu 写道
我做过sales,我来告诉lz关于bea价格方面,通常来说,卖一个bea产品, 集成商或者开发商会有10%的利润,而用开源,可能用户不会买这个帐, 呵呵。对于中型小型公司而言,技术永远不是最重要的,挣钱第一位。 呵呵。

  那甲方应该知道这些吧,那他们为什么也希望用这些呢?莫非是BEA给乙方回扣,乙方在给甲方回扣?大家这叫共赢?哈哈~


就向你说的,简单而且直白!