荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: servlet (nick), 信区: Java
标  题: 第一次感受接口编程的好处
发信站: 荔园晨风BBS站 (Wed Sep  6 19:25:57 2006), 站内

    还记得刚接触java的时候.写作业,把所有的方法集成到一个类中,然后用一个
main含数把它们串联起来。结果整个作业就是一个1000多行的类。当时暗喜:“你看,
我的作业多简洁?”。同时还对接口,虚类的质疑。觉得那些都是好看不好用的东西。
     将近毕业,课程不多了。终于有时间看些介绍简单项目的书。于是自已模拟需
求去做一些小项目:网上商店,新闻发布系统,论坛。到了那个阶段,一个类就是
一个系统的做法已经行不通。当时始对类有了些认识,当时系统的包结构大概是:
pojo,util,action,test。四个包包括所有类。这种结构从那时起一直使用,出来工作
后,主要是在别人的框架中写方法。自已不用考虑项目包结构,所以这种四个包的结构
一直用到最近。
      上星期接到一个任务,要开发一个子系统。于是昨天开始,自已再次开始搭建
系统框架。hibernate一直在用,但用的是2.x版本,由于3.x版本的包命名规则改变了,
session的管理也发生了很大变化。所以一直没用。spring方面,从0.x版本开始已经
听过很多网友说它的优点。但由于版本没过1.0.所以自已一直不感用。真正学它,是从
1.x版本开始,但也只是看文档,写简单测试代码,没有真正在项目中使用。这次既然
有机会自已搭建系统框架,于是一方面从hibernate2.x迁移到3.x。另一方面把spring
也集成到系统中。用的是2.0 rc3。数据库用的是mysql5.0.开发平台是eclipse3.2
插件:xmlbuddy,springide,hibernate tools。hibernate tools的功能较多,但在逆向
生成代码方面,远没有middlegen好。可惜middlegen好像没有出支持3.x的版本。虽然
很多人都看不起这类代码自动生成工具。但在表结构不复杂,系统较小的时候。先
用代码自动生成工具,再按需求修改,其实是个不错的选择。当然用xmlbuddy+dtd
自已写xml文件,难度也不大,但会出现很多重复的编码的工作。两者之间要找个折中点。
    由于系统中加入了spring,当然要试试接口编程,不然就浪费了。当时用接口时,
也只是试着玩,但框架搭建完后,才发觉他的好处。
    其实先写接口,再写虚类到实现类。这些看起来很麻烦,比直接用类麻烦很多。
但其实当你把接口写完了,虚类,实现类的框架都可以由IDE生成。所以和直接写类
所花的功夫差不多。但写完后结构清析了很多。而且在写一些小系统时,你也不想
画一大堆图,这时你可以写接口。因为在写接口的过程,就是你构思类中各方法如何
协作,协作后提供什么功能,各类如何通迅的过程。下面是这次我要开发的系统。
    系统包括了几个模块,分别是:1,网站分类(这个人工完成),2.按指定深度遍历
网页(这个以前做过,我自已写),3,去html标记,得出文字(一大堆开源软件包可以实
现:HtmlParser,httpclient……),4中文分词(这是一个有深度的主题,只能用别人
的包了,暂时找到几个开源的,也有商业的到时按效果选用)5,找出谁在用这些词在竞
价,价钱是多少。(这些要进入几个第三方系统去拿数据了,前段时间和一个前辈花了近
一天,合力写出了进入某系统的模块,而另一个需要验证码才能进的系统,某同事也写出
破解的模块,到时要搬过来用)。最后就是自已的框架了,包括写界面显视数据。判断
每个词的分值而进行排位。各种过虑,然后持久化。
     当我把系统框架搭建好后,然后写了持久层。写完持久层后发现,因为项目中需要
数个别人的工具包,而且可能随时更换。其它不说,就持久层本身,如果到时测试时发
觉有效率问题,可以要把整个hibernate更换成jdbc。这时问题就出现了,既然系统各部
份都一定要变,那我花时间搭框架有什么用?
      问题出现后,我翻看自已搭建的框架,发现各个类都是通过接口耦合,各个模块
也是通过自已定义的接口耦合在一起。也就是说,若我想换其中一个模块。我只要对新
模块的方法按照我搭建的系统框架接口进行一层封装后,就可以无缝地加入到原系统
中。接口的好处,第一次在我面前出现.
      我今天开始用接口编程,也在今天发现接口的好处。

     下面顺便说说spring集成hibernate。从hibernate2.x迁移到3.x并没有想像中困难,
只要对hibernate的一些基本概念搞懂后,迁移是件很容易的事。这次我没有单独用
hibernate,而是选择和spring捆绑在一起。捆绑后,大概有三种模式,一种是用spring
提供的HibernateTemplate封装你的hibernate代码。这样的好处是你不需要处理编译期
异常,不需处理session的释放,单个方法的事务.第二种是继承Spring的
HibernateDaoSuport类,这种方法有第一种方法的优点,缺点是功能比较弱。但处理一
些常规的save,delete,update,find时,代码非常简结。第三种是用Spring的ioc同时,
保存典型的hibernate编码型式。
     Spring的核心代码应该比Hibernate还要少。但它却被称为容器的容器,这可能就是
他的独特之处,他没有帮你去实现具体的功能,但去帮你的项目减小代码量,用一种松耦
合的方式把系统各模块粘合在一起。使系统更具扩展性,模块间的移植性。

--

※ 修改:·servlet 于 Sep  6 19:28:26 修改本文·[FROM: 219.134.177.24]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 219.134.177.24]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店