小弟4年半的java开发经验,以前做项目时,基本上也都用spring,众所周知,做spring的项目都是要写Dao,Service,DaoImpl,ServiceImpl的,打的旗号也一直说是好扩展。不过以我的经验而言,感觉实在没必要这样写,直接写实现类就可以了。现在公司有个小项目,我带着2个同事开发,我想在这个项目中就不面向接口了,不过同事中有人不同意,说将来没法扩展了,想来听听大家的意见。
我的看法是,如果我们要去爬珠峰,那么我们肯定要准备一套装备;如果我们只是要去爬香山,穿着拖鞋、短裤就够了。
我的看法是,如果我们要去爬珠峰,那么我们肯定要准备一套装备;如果我们只是要去爬香山,穿着拖鞋、短裤就够了。
你说你做了4年半的开发了,如果这样还在问这些外行问题的话,只能说你只是一个简单的体力工作者,做了这么多年开发了也应思考下到底什么才是开发工作了....而不是永远做一个打字员...
是的,做WEB开发一直做下来,确实能体会到抽象的好处的项目不会太多
非觉得没用那就不用...很简单的一个例子,你们肯定也天天用到的
Iterator接口
自己想想看为什么遍历集合体都实现这个接口
如果没有Iterator接口的情况
可能hashMap有个iteratorMap函数
可能arrayList有个findInArray函数
可能linkedList有个each函数
可能你接触的每个集合体的遍历函数都是不一样的,难道这样你还认为无所谓吗?不再回复了....实在感觉讨论这个东西没啥意义
总算有人说到本质了抽象方法抽象的是同一类行为的不同做法。 这样对于使用方来说,他只要知道有人给我做了一件什么事就可以了但是,具体怎么做的,不需要关心。再回到楼主的问题,同一类行为的不同做法需要抽象方法,而大多数情况下,我们写的Service和DAO需要一类行为提供多种不同实现方式的吗?显然很少需要。
记得Spring的教程里面有个很形象的例子,笔记本有USB接口,我们copy数据通过此接口出去,至于copy到什么地方,是取决于连接到此USB的设备,可能是U盘,也可能是移动硬盘。在此不再深入叙述了。
你对于已遇到的开发和维护的困难,用实现类去代替接口设计算是利用了反模式的理念,是不错的实践诶。
感兴趣的同学可以去搜搜大师完整的原话。抽象的目的是变与不变的分离,不在乎项目的大小不变的部分依赖变化的部分(或者易变的部分)时必然要进行抽象,也就是所说的,对抽象依赖,而不对具体实现类依赖。所以,个人观点是,需要灵活运用。上来就所有DAO和Service都写个接口然后去实现的方式,个人不赞同。
楼上说的有一定道理。
不过我确实感到了接口带来的压力,
1、事实上,每次我都是先写实现,然后再去定义接口的,所以感到是为了接口而接口
2、有时想看代码时,随手一点,经常会跳到接口中,感到很恼火,愈发感觉接口的多余就事论事的说,针对你说的“协同工作的时候,你可以先定义接口,其他人员就可以继续工作了,而不需要你非要完成所有实”这个问题,同事也提过,不过我想如果你事先想清楚要实现哪些方法,你也可以在实现类中定义出来,返回Null也是一样,不会影响别人的工作