关于java,面向对象的疑惑

bqyy 2012-01-09 04:20:23
声明:
一、本人水平很菜,开发工具用过PB,C#,JAVA,虽然都写过三两个小程序,但没啥真才实学,卖点银子挣钱糊口而已。
二、我无意判断语言或平台的高下,只是心中有太多疑惑无法解决,想求个说法
三、本人追求还是有点,也断断续续的看了些面向对象、设计模式之类的书,不求能做出什么高水平的产品,只求自己写出的东西看着不那么丑陋。
四、从没写过这么长的帖子,希望大伙多给意见少骂娘。
先从PB说起。PB用的最多了,用了PB就离不开SQL,所以SQL也略知一二。我想大多数做管理软件的前辈都是SQL方面的专家,那才是真的精通,我这水平顶多算知道。
以前用PB写程序,没啥框架、设计模式、面向对象的概念,一大堆函数摞在一起,就变成了程序,维护的时候虽然有点工作量,但也不觉得很麻烦,有了改动的要求,从数据库开始,修改表结构、视图、存贮过程然后在前台修改录入界面,处理逻辑可以放在前台,也可以放在存贮过程里,反正一套下来也用不了多久。
后来听说OO好啊,逻辑清楚、重用性强、容易维护,所以就去看,看了很久,不知道怎么用。
最初的想法是在PB里先实践一把面向对象,一是因为PB我熟啊,不用学语言,二是因为pb除了没有interface外,继承、多态和封装三个OO的特性是完整的,但结果却是一个无比痛苦的过程,我几乎不会写程序了。最关键的问题就在数据存贮那里,因为没有工具的支持,如果想象JAVA里那样应用ORM简直就是不可能完成的任务,所以只能写SQL或用开发工具提供的函数。
后来再用PB还是先尽着先把活干完的硬道理,少想OO。
在PB那里碰了壁,就想,也许学JAVA能解决这个问题?听说Hibernate啥的做ORM很好。所以就学了JAVA,但JAVA真是让人又爱又恨的东东。
爱他什么?第一是免费!我个人分析,JAVA为什么能大火?既然很多大牛都说语言无高下,为什么JAVA会比C#火?为什么android会用JAVA?为什么越大的软件开发公司越要用JAVA?我想,JAVA及相关完整的一系列产品如web服务器、数据库、开发环境的免费是一个重要原因,一个开发公司如果20个人,光开发环境得省多少银子啊!第二是跨平台的基础上保证了效率。linux+tomcat+mysql/oracle对于中小项目来说多么轻快,而微软的2008+IIS+SQL 2008是一个多么臃肿的组合!当然,java方案也可以更加臃肿,但我感觉常见的web应用前面的组合基本够用了。
恨他什么?一是标准太多,解决方案太多!象我这样的程序员,想的是怎样干活、收钱,而不是先要从几十个标准或解决方案中找个合适的来用,否则等我们想清楚用什么了,客户早跑了!二是JAVA的产品线是不是不完整的?昨天想把以前PB的程序升级一下,用JAVA重写一遍,以前也知道有个swing,后来上网一查,据说swing的界面效果很一般,甚至,比PB的还要一般,这可真是太难让人接受了!后来查到有IBM的SWT和oracle新出的JavaFX,但好像都不能跨平台了?这不是把java的第二大优点给抛弃了?如果不能跨平台,是不是不如用C#?
无论怎样,还是先学了JAVA又学Hibernate。才发觉Hibernate是不是没有传说中那么美好?Hibernate+strust2+spring确实可以得到理想的框架结构,strust2负责把收集前台数据组装对象,spring负责控制事务,Hibernate负责持久化,但是,如果只需要查询对象中的某几个属性(数据库中的某几个列),Hibernate可以么?如果我不管对象原来的内容是什么,为列增加新的内容,SQL只需要一个操作,Hibernate需要几个?如果修改库结构,hibernate要从mapping file到处理逻辑到前台页面都改一通,比原来好像又多了个修改mapping file?(别说我需求做的不好,用户的心思,那基本是没得猜)还有,AJAX类应用里使用用GSON的时候,好像可以使用Annotation说明哪些属性可以变成json串,但如果我要动态改变成为json串的属性怎么办?这些场合应用面向对象会不会无谓的增加系统的通信量和负担?
在学习JAVA之中,学了一阵C#,而且在.net 2.0上做了一个和银行联网收费的服务端程序,使用套接字与银行通信,多线程和队列处理请求,并没有传说的效率低、不稳定之类问题。.net的好处是什么?windows平台上,一整套实用的解决方案,不必东奔西走,一站式服务到家,方便啊,不必选,也没的选,有什么用什么就行了。.net的缺点是什么?一是收费!从OS到开发工具到数据库全面收费!二是弄了个CLS(公共语言规范)让全体语言为.net打工,结果是大伙都不听他的,只剩微软的产品了,其他做语言的公司要么关门要么彻底成了MS的附庸,给MS打工,完全没有创新(PB和delphi的结局);三是,微软的产品越来越庞大!我现在的机器是i5 750/4g,这配置放以前那也是入门级服务器了,跑个2008+IIS象老牛拉破车。虽然企业级的Linux一直很庞大,但一直没有微软慢。
罗嗦了这么多,也不知道表述明白了没有,求解答!!!
...全文
137 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bqyy 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 runffer_yang 的回复:]

引用 7 楼 bqyy 的回复:

RDB是暂时的解决方案?还有不暂时的么?面向对象的数据库有成熟的么?面对只取部分数据这样的问题是不是仍然效率不高?
维护性上,使用hibernate在修改库结构时的工作量真的减少了么?
重用性上,没有ORM也可以有重用性啊,只是我的感觉是不容易分离业务逻辑和数据访问
对于微软的产品布局我确实没啥了解,我所能遇到的系统就是CRM、物料管理之类的应用,o……
[/Quote]
非常感谢!也坚定了我继续在j2ee上折腾的决心。
Steve 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bqyy 的回复:]

RDB是暂时的解决方案?还有不暂时的么?面向对象的数据库有成熟的么?面对只取部分数据这样的问题是不是仍然效率不高?
维护性上,使用hibernate在修改库结构时的工作量真的减少了么?
重用性上,没有ORM也可以有重用性啊,只是我的感觉是不容易分离业务逻辑和数据访问
对于微软的产品布局我确实没啥了解,我所能遇到的系统就是CRM、物料管理之类的应用,os+web服务器+数据库这三大件已经足够了
[/Quote]

面向对象的数据库你可以查一下JPO, 如果你是个效率厨,何必说Java,甚至C++,Ruby都是令你无法忍受的。
现在服务器的性能对SELECT了几个field有什么太大的差别。另外显然你不知道Hibernate当然可以指定列:
String sql = "SELECT c.name, c.id FROM Cat c WHERE c.name IN (:name)";  
Query query = ...
query.setParameterList("name", conditions);

在修改库结构方面,ORM的效率是不容置疑的,select,update, insert语句完全不用修改,而用SQL则要加减更改的column。
“os+web服务器+数据库这三大件已经足够了”
这句不知道从何谈起,GAE,Azure本身就可以说是os+web服务器+数据库,外加高度Scalability。

关于你说的几个问题:
>如果只需要查询对象中的某几个属性(数据库中的某几个列),Hibernate可以么?
当然可以,参见上面代码。

>如果我不管对象原来的内容是什么,为列增加新的内容,SQL只需要一个操作,Hibernate需要几个?
SQL不可能只需一个操作,CRUD里就占了3个。用Eclipse工具Hibernate什么都不用做。view的修改工作量双方是等同的。

>如果修改库结构,hibernate要从mapping file到处理逻辑到前台页面都改一通,比原来好像又多了个修改mapping file?(别说我需求做的不好,用户的心思,那基本是没得猜)
已经提了mapping file,后头又多算一个。如果你安装了正确的插件,这些都是自动化的。前台SQL也需要修改。

>AJAX类应用里使用用GSON的时候,好像可以使用Annotation说明哪些属性可以变成json串,但如果我要动态改变成为json串的属性怎么办?
没有具体例子不知道想做什么,GSON之前的类实例难道不可以动态修改吗?

>这些场合应用面向对象会不会无谓的增加系统的通信量和负担?
这些增加的负载微乎其微,和提高的工作效率比较完全可以忽略不计。但是谁说面向对象就只能是面向对象了,
就像Hibernate支持SQL,可以规定SELECT的column,为何要一棒子打死?难道Java没提供给你function?至少Java还不像
ruby那样面向对象做得非常彻底。用SSH的有几个用到真正的面向对象?跟Apache Wicket, Tapestry差远了。

>JAVA的产品线是不是不完整?昨天想把以前PB的程序升级一下,用JAVA重写一遍,以前也知道有个swing,后来上网一查,据说swing的界面效果很一般,甚至,比PB的还要一般,这可真是太难让人接受了!后来查到有IBM的SWT和oracle新出的JavaFX,但好像都不能跨平台了?这不是把java的第二大优点给抛弃了?如果不能跨平台,是不是不如用C#?

Swing是很古老的库,JavaFX是Swing+Java2D基础上建立,可以说是Swing的进化形态,而JavaFX是典型的跨平台方案,Eclipse是SWT构筑的,那么你认为Eclipse是不是跨平台的?
至少我的MacbookPro可以用Eclipse而不能跑Visual Studio。至于SWT里可以有Win32API,就像Hibernate可以支持SQL,不
不正是你崇尚的“效率”吗?


bqyy 2012-01-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 beowulf2005 的回复:]

1) Hibernate 可以执行任何 SQL,
增加表,可以不改Mapping File, 自己从Object Mapping 或者自己定制Transformer 来Mapping
LZ应该花点时间看Hibernate的文档 和 源码。

2)问题问的不清楚,AJAX是一种概念,可以有任意多种实现方式,不知道LZ的AJAX类应用指的是什么。

3)swing早期版本是难看点,现在……
[/Quote]
1.是,可以用原生SQL,也许不必执着于是不是面向对象的,hibernate既给我们提供了使用ORM的途径,也提供了绕开ORM的途径,这样可以既享受orm带来的方便,在某些特殊的情况下仍然可以保持合理的效率。
我说的不是增加表,而是修改表结构,不过,这个修改mapping file的工作应该是有工具自动化的。
2.从后台传递信息到前台,比如在jqgrid中,需要把后台的数据变成json串,这里也有只需要传递对象中部分数据的问题。
3.c#不能跨平台,我的意思是,java和C#如果都不能跨平台,那在此类应用中我们选择java的理由就少了
beowulf2005 2012-01-09
  • 打赏
  • 举报
回复
1) Hibernate 可以执行任何 SQL,
增加表,可以不改Mapping File, 自己从Object Mapping 或者自己定制Transformer 来Mapping
LZ应该花点时间看Hibernate的文档 和 源码。

2)问题问的不清楚,AJAX是一种概念,可以有任意多种实现方式,不知道LZ的AJAX类应用指的是什么。

3)swing早期版本是难看点,现在据说还可以了。C#做的界面是跨平台的??
bqyy 2012-01-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 runffer_yang 的回复:]

RDB只是一个暂时的解决方案,现在越来越多的环境并不支持传统的SQL。最终进化的阶段性终点就是不用SQL,直接操作Object存储。当然现在的ORM只是朝这个方向前进,当不需要ORM直接操作Object DB的时候ORM就是多余的。
如果你用ORM来操作RDB,效率当然不如直接写SQL,但是维护性,重用性,Scalability要做出牺牲。
你对微软的布局了解也比较陈旧,微软整体都在向Azu……
[/Quote]
RDB是暂时的解决方案?还有不暂时的么?面向对象的数据库有成熟的么?面对只取部分数据这样的问题是不是仍然效率不高?
维护性上,使用hibernate在修改库结构时的工作量真的减少了么?
重用性上,没有ORM也可以有重用性啊,只是我的感觉是不容易分离业务逻辑和数据访问
对于微软的产品布局我确实没啥了解,我所能遇到的系统就是CRM、物料管理之类的应用,os+web服务器+数据库这三大件已经足够了
bqyy 2012-01-09
  • 打赏
  • 举报
回复
写的太多,可能不容易找到重点。问题如下:
如果只需要查询对象中的某几个属性(数据库中的某几个列),Hibernate可以么?
如果我不管对象原来的内容是什么,为列增加新的内容,SQL只需要一个操作,Hibernate需要几个?
如果修改库结构,hibernate要从mapping file到处理逻辑到前台页面都改一通,比原来好像又多了个修改mapping file?(别说我需求做的不好,用户的心思,那基本是没得猜)
AJAX类应用里使用用GSON的时候,好像可以使用Annotation说明哪些属性可以变成json串,但如果我要动态改变成为json串的属性怎么办?
这些场合应用面向对象会不会无谓的增加系统的通信量和负担?
JAVA的产品线是不是不完整?昨天想把以前PB的程序升级一下,用JAVA重写一遍,以前也知道有个swing,后来上网一查,据说swing的界面效果很一般,甚至,比PB的还要一般,这可真是太难让人接受了!后来查到有IBM的SWT和oracle新出的JavaFX,但好像都不能跨平台了?这不是把java的第二大优点给抛弃了?如果不能跨平台,是不是不如用C#?
  • 打赏
  • 举报
回复
LZ精神可嘉! 写了这么多
Steve 2012-01-09
  • 打赏
  • 举报
回复
RDB只是一个暂时的解决方案,现在越来越多的环境并不支持传统的SQL。最终进化的阶段性终点就是不用SQL,直接操作Object存储。当然现在的ORM只是朝这个方向前进,当不需要ORM直接操作Object DB的时候ORM就是多余的。
如果你用ORM来操作RDB,效率当然不如直接写SQL,但是维护性,重用性,Scalability要做出牺牲。
你对微软的布局了解也比较陈旧,微软整体都在向Azure转,微软的产品里也有很多免费的。Amazon, GAE也不是免费让你用的。另外Java里也有iBatis这种比较接近SQL的框架。
bqyy 2012-01-09
  • 打赏
  • 举报
回复
自己沙发,这么久没人说点什么?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧