论坛首页 Java企业应用论坛

关于Java开发不明白的一些问题

浏览 42425 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-03-08   最后修改:2011-03-08
1.关于解耦

这个词自从接触设计模式以来,便整天萦绕耳边,以前觉得不错,但是最近越来越觉得像苍蝇了,能多恶心你就多恶心你.

本来解耦无可厚非,高内聚,低耦合谁都懂的道理,但是现在,这个词真的被滥用了.


解耦不过是一个用来迷糊人的手段,是追求过度设计的人显摆的工具

只有真正的内聚,没有绝对解耦,但凡你在某个地方切断联系,那么你必然会在另一个地方重新产生联系

通常来说,切断联系的地方就在于方法的调用(或者对象的实例化),而重新产生联系的地方就在于框架

物体被打碎以后,需要重新黏合在一起才能使用

代码被解耦以后,同样需要再次耦合起来完成功能

物体的黏合除了人还需要粘合剂

而对于代码来说,同样需要粘合剂,这里的粘合剂就是配置文件或者注解


本来嘛,不变的东西,用基类实现,不同的行为用子类复写,对于外界的调用,可以定义一个接口

现在倒好,搞一大堆配置文件,声称是解耦,可是配置文件改动的地方没有十分之一

把一个功能拆分到五六个方法里面,声称是为了代码复用,除了你用,别人根本不知道在什么地方

一个包含了全部逻辑的方法,拿到哪里都能用,现在呢,解耦了,复用去吧,离开框架你屁都不是,还解耦呢!


以前代码的整体感没有了,现在就是把一个完整的躯体给直接给肢解了,把关注的部分留下来,其他的都送给框架了,

送些衣服可以,可是如果连肉都送了,那么你的代码还真解不了藕,因为没有了血肉就是死



比较Struts1和Struts2两种框架,我承认后者配置更简单,但是谁要跟我说它有优点,简直是TMD的放屁:

1)与Web容器完全解耦

解个屁耦,难道Struts不是一个Web框架么?哪里能少得了Servlet API?没有Servlet,Struts屁都不是,

敢问有几个利用Struts而不是做Web开发的?

就算你解耦又如何?我还不是需要Request对象和Response对象?我使用了ContextUtil也能算解耦呢?

做Web开发又去和Web解耦,真是闲得蛋疼!

2)更容易测试,Web工程里面的逻辑有几个是脱离了Web环境来测试的?

不需要Web环境的代码段我可以单独放一个方法里定义,用得着使用Struts2来解耦?

3)Struts2比Struts1更容易理解,完全是放屁

不看文档,鬼知道从哪里获取Request对象和Response对象!

而且一个action又做M又做C,干脆你连V也做了,不更省事?不过话说这样的话,我还用得着框架?



2.关于接口

接口无非一种规范,我可以实现,也以不实现,我可以实现你想要的,也可以实现你不想要的;

不过用来约束的一种玩意儿,可是某些人却认为接口优于一切,没有接口就意味着不规范

于是,凡是逻辑处理类,一律xXXXX和xXXXXImpl,神马都是接口

接口是挺好,但是真的需要到处都用么?你的逻辑永远都不会改变,你整个接口到底是为什么?

仅仅是为了规范么?但是没有接口就不规范么?



3.关于IOC

自从Spring将IOC发扬光大以后,便言必称IOC,因为有了IOC,连接口都可以不用了

现在的Java已经走火入魔了,当C++返璞归真趋于平淡的时候,Java不知何事开始流行起奇技淫巧来了

仿佛学Java如果你不懂IOC,如果你不懂DI,如果你不懂AOP,如果你不懂Annoation,如果你不懂AspectJ,如果你不懂cglib,你就out了

IOC离不开配置文件,现在或者可以说离不开注解

真的很方便么?效率的低下尚且不说,调试的麻烦姑且不论,但是代码的理解还有可读性么?

你不跳出框架来看,你永远搞不明白它的逻辑

本来简单的几行代码就可以搞定,现在却要不停地在代码和配置文件直接跳来跳去

或者从一堆堆Annoation中找出你所需要的那几行.

4.关于Annoation

本来很反感XML的配置文件,仿佛和我一样的人大有人在,所有现在Annoation开始盛行

不过现在看来我倒是有点觉得XML没有那么反感了

至少,XML能让我感觉到代码的清爽,可是那么多的Annoation,真是惨不忍睹啊?

XML可以避免重新编译,而Annoation呢?

答案就是避免XML,直接写代码也能避免XML,需要Annoation干嘛呢?

又是为了俗不可耐的解耦?算了吧?即使解耦你就不需要写代码了?

改一段逻辑清晰的代码,比改一个个完全不明所以的注解容易多了

除非你去看注解的源码,或者相信注解的注释文档

   发表时间:2011-03-08  
nianien 写道
2.关于接口

接口无非一种规范,我可以实现,也以不实现,我可以实现你想要的,也可以实现你不想要的;

不过用来约束的一种玩意儿,可是某些人却认为接口优于一切,没有接口就意味着不规范

于是,凡是逻辑处理类,一律xXXXX和xXXXXImpl,神马都是接口

接口是挺好,但是真的需要到处都用么?你的逻辑永远都不会改变,你整个接口到底是为什么?

仅仅是为了规范么?但是没有接口就不规范么?



3.关于IOC

自从Spring将IOC发扬光大以后,便言必称IOC,因为有了IOC,连接口都可以不用了

现在的Java已经走火入魔了,当C++返璞归真趋于平淡的时候,Java不知何事开始流行起奇技淫巧来了

仿佛学Java如果你不懂IOC,如果你不懂DI,如果你不懂AOP,如果你不懂Annoation,如果你不懂AspectJ,如果你不懂cglib,你就out了

IOC离不开配置文件,现在或者可以说离不开注解

真的很方便么?效率的低下尚且不说,调试的麻烦姑且不论,但是代码的理解还有可读性么?

你不跳出框架来看,你永远搞不明白它的逻辑

本来简单的几行代码就可以搞定,现在却要不停地在代码和配置文件直接跳来跳去

或者从一堆堆Annoation中找出你所需要的那几行.

4.关于Annoation

本来很反感XML的配置文件,仿佛和我一样的人大有人在,所有现在Annoation开始盛行

不过现在看来我倒是有点觉得XML没有那么反感了

至少,XML能让我感觉到代码的清爽,可是那么多的Annoation,真是惨不忍睹啊?

XML可以避免重新编译,而Annoation呢?

答案就是避免XML,直接写代码也能避免XML,需要Annoation干嘛呢?

又是为了俗不可耐的解耦?算了吧?即使解耦你就不需要写代码了?

改一段逻辑清晰的代码,比改一个个完全不明所以的注解容易多了

除非你去看注解的源码,或者相信注解的注释文档

面向接口,不面向实现编程,这算是OO基本原则吧。你可以不是一个接口论者,但很多人都是。到一个团队里,你就是一小部分人。你选择不合作,ok,你没有团队精神,你不合群。哈哈。
引用
自从Spring将IOC发扬光大以后,便言必称IOC,因为有了IOC,连接口都可以不用了

你怎么会得出"有了IOC,连接口都可不用了"的结论?

在JavaWeb领域,至于IOC和DI及AOP,这几种东西,包括了很多OO的原则和设计模式的东西在里面,懂得原理的话,说明你有点水平,也许说明不了什么,但你至少懂。如果不懂原理,会用,说明你没out。

至于xml和annotation都是为了解藕,统一规范,提高开发效率,利于维护。没人肯定说哪个更好,个人团队喜欢问题。

飘过...

ps:你可以继续你的呼喊,但我选择做大众,哈哈。
1 请登录后投票
   发表时间:2011-03-08  
peterwei 写道
nianien 写道
2.关于接口

接口无非一种规范,我可以实现,也以不实现,我可以实现你想要的,也可以实现你不想要的;

不过用来约束的一种玩意儿,可是某些人却认为接口优于一切,没有接口就意味着不规范

于是,凡是逻辑处理类,一律xXXXX和xXXXXImpl,神马都是接口

接口是挺好,但是真的需要到处都用么?你的逻辑永远都不会改变,你整个接口到底是为什么?

仅仅是为了规范么?但是没有接口就不规范么?



3.关于IOC

自从Spring将IOC发扬光大以后,便言必称IOC,因为有了IOC,连接口都可以不用了

现在的Java已经走火入魔了,当C++返璞归真趋于平淡的时候,Java不知何事开始流行起奇技淫巧来了

仿佛学Java如果你不懂IOC,如果你不懂DI,如果你不懂AOP,如果你不懂Annoation,如果你不懂AspectJ,如果你不懂cglib,你就out了

IOC离不开配置文件,现在或者可以说离不开注解

真的很方便么?效率的低下尚且不说,调试的麻烦姑且不论,但是代码的理解还有可读性么?

你不跳出框架来看,你永远搞不明白它的逻辑

本来简单的几行代码就可以搞定,现在却要不停地在代码和配置文件直接跳来跳去

或者从一堆堆Annoation中找出你所需要的那几行.

4.关于Annoation

本来很反感XML的配置文件,仿佛和我一样的人大有人在,所有现在Annoation开始盛行

不过现在看来我倒是有点觉得XML没有那么反感了

至少,XML能让我感觉到代码的清爽,可是那么多的Annoation,真是惨不忍睹啊?

XML可以避免重新编译,而Annoation呢?

答案就是避免XML,直接写代码也能避免XML,需要Annoation干嘛呢?

又是为了俗不可耐的解耦?算了吧?即使解耦你就不需要写代码了?

改一段逻辑清晰的代码,比改一个个完全不明所以的注解容易多了

除非你去看注解的源码,或者相信注解的注释文档

面向接口,不面向实现编程,这算是OO基本原则吧。你可以不是一个接口论者,但很多人都是。到一个团队里,你就是一小部分人。你选择不合作,ok,你没有团队精神,你不合群。哈哈。
引用
自从Spring将IOC发扬光大以后,便言必称IOC,因为有了IOC,连接口都可以不用了

你怎么会得出"有了IOC,连接口都可不用了"的结论?

在JavaWeb领域,至于IOC和DI及AOP,这几种东西,包括了很多OO的原则和设计模式的东西在里面,懂得原理的话,说明你有点水平,也许说明不了什么,但你至少懂。如果不懂原理,会用,说明你没out。

至于xml和annotation都是为了解藕,统一规范,提高开发效率,利于维护。没人肯定说哪个更好,个人团队喜欢问题。

飘过...

ps:你可以继续你的呼喊,但我选择做大众,哈哈。



我承认接口的重要性,但不是唯接口论者,用接口可以,但是得明白为什么用?
写代码是需要思考的,我们不是码字工
0 请登录后投票
   发表时间:2011-03-08  
引用
解耦不过是一个用来迷糊人的手段,是追求过度设计的人显摆的工具

这个真不是迷糊人的手段,解耦在设计时绝对需要的。也许有人追求过度设计,但不会是大多数人。题外话:会显摆是一种交际技能。

为了避免设计和代码中的恶性依赖,所以用IOC容器、配置、Annotation这些东东来达到良性依赖。依赖是不可避免的,但可以达到良性的。
0 请登录后投票
   发表时间:2011-03-08  
引用
2.关于接口

接口无非一种规范,我可以实现,也以不实现,我可以实现你想要的,也可以实现你不想要的;

不过用来约束的一种玩意儿,可是某些人却认为接口优于一切,没有接口就意味着不规范

于是,凡是逻辑处理类,一律xXXXX和xXXXXImpl,神马都是接口

接口是挺好,但是真的需要到处都用么?你的逻辑永远都不会改变,你整个接口到底是为什么?

仅仅是为了规范么?但是没有接口就不规范么?

我是觉得如果你的代码如果要发布给另外的开发人员,就应该尽量用接口与客户程序员打交道。一个例子是hibernate这类的框架,你会发现你使用的主要类都是是接口。

你的言论有个问题是你没有说清楚你观点的上下文,如果是一个小型的项目,我觉得你的观点大多都还ok,但是如果是一个大项目,你的观点就很有问题了。
0 请登录后投票
   发表时间:2011-03-09  
只有真正的内聚,没有绝对解耦,但凡你在某个地方切断联系,那么你必然会在另一个地方重新产生联系
高内聚,低耦合=解耦,所以你的话我基本同意

本来嘛,不变的东西,用基类实现,不同的行为用子类复写,对于外界的调用,可以定义一个接口
这句话我完全同意

关于Struts1和Struts2两种框架的观点我同意你的观点

关于接口我完全不同意

IOC那块我认为就是接口的产物,1个接口有2种实现,需要更换的时候就可以更改XML不必动代码和重新编译

基于上述观点,我也认为Annoation不伦不类
0 请登录后投票
   发表时间:2011-03-09  
nianien 写道
1.关于解耦

这个词自从接触设计模式以来,便整天萦绕耳边,以前觉得不错,但是最近越来越觉得像苍蝇了,能多恶心你就多恶心你.

本来解耦无可厚非,高内聚,低耦合谁都懂的道理,但是现在,这个词真的被滥用了.


解耦不过是一个用来迷糊人的手段,是追求过度设计的人显摆的工具

只有真正的内聚,没有绝对解耦,但凡你在某个地方切断联系,那么你必然会在另一个地方重新产生联系

通常来说,切断联系的地方就在于方法的调用(或者对象的实例化),而重新产生联系的地方就在于框架

物体被打碎以后,需要重新黏合在一起才能使用

代码被解耦以后,同样需要再次耦合起来完成功能

物体的黏合除了人还需要粘合剂

而对于代码来说,同样需要粘合剂,这里的粘合剂就是配置文件或者注解


本来嘛,不变的东西,用基类实现,不同的行为用子类复写,对于外界的调用,可以定义一个接口

现在倒好,搞一大堆配置文件,声称是解耦,可是配置文件改动的地方没有十分之一

把一个功能拆分到五六个方法里面,声称是为了代码复用,除了你用,别人根本不知道在什么地方

一个包含了全部逻辑的方法,拿到哪里都能用,现在呢,解耦了,复用去吧,离开框架你屁都不是,还解耦呢!


以前代码的整体感没有了,现在就是把一个完整的躯体给直接给肢解了,把关注的部分留下来,其他的都送给框架了,

送些衣服可以,可是如果连肉都送了,那么你的代码还真解不了藕,因为没有了血肉就是死



比较Struts1和Struts2两种框架,我承认后者配置更简单,但是谁要跟我说它有优点,简直是TMD的放屁:

1)与Web容器完全解耦

解个屁耦,难道Struts不是一个Web框架么?哪里能少得了Servlet API?没有Servlet,Struts屁都不是,

敢问有几个利用Struts而不是做Web开发的?

就算你解耦又如何?我还不是需要Request对象和Response对象?我使用了ContextUtil也能算解耦呢?

做Web开发又去和Web解耦,真是闲得蛋疼!

2)更容易测试,Web工程里面的逻辑有几个是脱离了Web环境来测试的?

不需要Web环境的代码段我可以单独放一个方法里定义,用得着使用Struts2来解耦?

3)Struts2比Struts1更容易理解,完全是放屁

不看文档,鬼知道从哪里获取Request对象和Response对象!

而且一个action又做M又做C,干脆你连V也做了,不更省事?不过话说这样的话,我还用得着框架?



2.关于接口

接口无非一种规范,我可以实现,也以不实现,我可以实现你想要的,也可以实现你不想要的;

不过用来约束的一种玩意儿,可是某些人却认为接口优于一切,没有接口就意味着不规范

于是,凡是逻辑处理类,一律xXXXX和xXXXXImpl,神马都是接口

接口是挺好,但是真的需要到处都用么?你的逻辑永远都不会改变,你整个接口到底是为什么?

仅仅是为了规范么?但是没有接口就不规范么?



3.关于IOC

自从Spring将IOC发扬光大以后,便言必称IOC,因为有了IOC,连接口都可以不用了

现在的Java已经走火入魔了,当C++返璞归真趋于平淡的时候,Java不知何事开始流行起奇技淫巧来了

仿佛学Java如果你不懂IOC,如果你不懂DI,如果你不懂AOP,如果你不懂Annoation,如果你不懂AspectJ,如果你不懂cglib,你就out了

IOC离不开配置文件,现在或者可以说离不开注解

真的很方便么?效率的低下尚且不说,调试的麻烦姑且不论,但是代码的理解还有可读性么?

你不跳出框架来看,你永远搞不明白它的逻辑

本来简单的几行代码就可以搞定,现在却要不停地在代码和配置文件直接跳来跳去

或者从一堆堆Annoation中找出你所需要的那几行.

4.关于Annoation

本来很反感XML的配置文件,仿佛和我一样的人大有人在,所有现在Annoation开始盛行

不过现在看来我倒是有点觉得XML没有那么反感了

至少,XML能让我感觉到代码的清爽,可是那么多的Annoation,真是惨不忍睹啊?

XML可以避免重新编译,而Annoation呢?

答案就是避免XML,直接写代码也能避免XML,需要Annoation干嘛呢?

又是为了俗不可耐的解耦?算了吧?即使解耦你就不需要写代码了?

改一段逻辑清晰的代码,比改一个个完全不明所以的注解容易多了

除非你去看注解的源码,或者相信注解的注释文档




1我相信重复代码少的代码就是好代码,简单的验证就是用压缩软件压,难压的就是好的
2我认为只有一个实现(包括可以预计的将来)的代码,就是不应该提取接口的代码
3ioc不喜欢,Prefer interface to reflection,我相信google首席架构师说的,用spring主要是看中事务管理
4慎用Annotation,Prefer annotations to naming patterns,再加上@override,这里才是annotation的归宿。
0 请登录后投票
   发表时间:2011-03-09  
随你便吧,只能说这个行业不适合你
0 请登录后投票
   发表时间:2011-03-09   最后修改:2011-03-09
解不解耦
有个数量级问题.

几百行代码一气写出东西那是2K年我刚毕业时候的事了.....

如果干的活与2K年差别不大那很多工具用处不是很大
0 请登录后投票
   发表时间:2011-03-09  
语言只是工具 、框架更是工具的工具 、实现才是目的、
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics