论坛首页 招聘求职论坛

一个非应届生的自言自语(SSH,我挺喜欢)

浏览 8486 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-06-19   最后修改:2009-06-28
    首先,我不是应届生。我目前就读于苏州的一个大学。大三年级。专业为软件工程。
    论坛里最近发了很多关于应届生的问题,比如:SSH?DWR?什么简历写的太水等等,这种全盘否定的帖子,我到要出来说说话。

    1,关于SSH,SSH2,等等的问题。   
    请问,一些在位牛人(经常批评学生的),你们工作中难道不是使用的这种框架?你们也许用过许多框架,但是你们常用的请问是不是这几种?也许你会抱怨,公司的要求,部门的决定,但是归根到底你在使用这些框架,那么别人学这些框架不是很正常吗?(会的人多,技术成熟,学习曲线低,项目成本低)你们为什么要说三倒四呢?一提到SSH的问题,我想现在许多牛人已经想说一些攻击我的话了吧?您先听我说完。JSP,SERVLET,JDBC,是的,它们很好,而且它们是规范,是标准(SPRING您喜欢吗?它是标准吗?)。JDBC的速度快,什么JSP,SERVLET一样可以搭建出可不断升级的软件。对,这些没错,很对。但是请问,您在工作有有多少实际项目用到这些东西?全部使用了吗?



    谈到这,许多人说在读学生只知道SSH,那么可以,我来谈谈我的SSH。(我不多提代码,免得被大牛们说,我是代码工人)

     在项目中,我一般使用的分层结构:

     Dao(Hibernate/Ibatis)--- service (Spring) -- action (Struts2/Webwork) 。我不会使用JSP/SERVLET技术去实现我的展现层。在论坛上许多人提出这种分层的问题(首先我先抛开贫血模型/充血模型的问题),许多人建议把action 层与service 合并的。包括在SPRINGSIDE中,我看见SPRINGSIDE中封装了泛型DAO层,之后直接在service 中继承Dao。并非直接使用Dao继承action 。当然,直接抛开service 层有它的好处,但是我认为坏处远远大于好处。首先一个辣手的问题就是耦合的问题。

     比如,这里一个USER Action的usersByPage方法:

   
 public String usersByPage() throws Exception{
		// 从Session中得到当前登录用户的loginName。这里的Session loginName从登陆时记录。
		 loginName=(String)(ActionContext.getContext().getSession().get("loginName"));
		//判断用户是否加入了球队
			if(userServices.findUserByLoginName(loginName).getTeam()==null){
				return ERROR;
			}
		Integer teamId=userServices.findUserByLoginName(loginName).getTeam().getId();
		
		users=userServices.getAll();
		 
		......

		return SUCCESS;
	}


这个方法还好,但是很明显,这种做法很幼稚。Action到最后极度膨胀。下面是各幼稚的。

public String usersByPage() throws Exception{
		// 从Session中得到当前登录用户的loginName。这里的Session loginName从登陆时记录。
		 loginName=(String)(ActionContext.getContext().getSession().get("loginName"));
		//判断用户是否加入了球队
			if(Dao.findUserByLoginName(loginName).getTeam()==null){
				return ERROR;
			}
		Integer teamId=userDao.findUserByLoginName(loginName).getTeam().getId();
		
		users=userDao.getAll();
		 
		......

		return SUCCESS;
	}


     这里的Action直接调用Dao.当然,这里的DAO传入的数据完全符合ACTION的需求,而且由于让SPRING去IOC了,所以这个usersByPage看起来也并非很幼稚,问题是,ACTION过度膨胀,导致这些ACTION很难重构,重构的目的在于程序清晰可见,更容易做测试,但是过于膨胀的类是很难重构的,这里不是技术问题,而是人的问题,你看见一大堆东西,你看上去就不舒服,心就烦,而且这些东西搬来搬去,如果最后还是放在同一个ACTION里,还是很不爽的一件事情。而且,这里很明显,这2个方法都不OO。或者说,上面的那个ACTION虽然调用了Services,但是ACTION还是膨胀,根本没有解决实际问题,Services只是起个空架子。类似于做了这种事情:


public List getAll() throws RuntimeException {
		return userDao.getAll();
	}



       但是,加个空架子,也许有它的好处吧。首先,把事务处理放在Services中也未必是坏事。而且,哪一天,ACTION里实在过度膨胀,把一些方法放在Services中操作,也能减轻点ACTION的负担,而且,也方便于重构,更重要的是,如果方法独立,单独的放在Services中也方便于TDD。更重要的是,STRUTS2属于展现层框架,把业务逻辑放在展现层中实在有点违背展现层这个名词,所以,我不建议把ACTION当做 ACTION+Services来用。当然,如果完全的CURD,为了速度,小项目,这样做也是不错的选择,可以提高开发速度,而且,小项目也没什么维护。把一堆东西放在ACTION里,也并非完全不可取。但是,如果你 的系统从设计的开始就使用的OO,那么很明显,这种ACTION+Services的分层,我觉得会很不适合。

以上谈到的是TS的开发模式。关于对模型充血,按MF说的,按《DDD》的那一套,我感觉都不怎么合适,原因我想大家都知道。SPRING+HIBERNATE的问题,这里论坛的讨论很多,我就不多说了。自己有兴趣可 以看看讨论。我的做法是把Service在分开,把一些通用的模块尽量做成组件,之后在每个Service里调,比较爽,有点OO的感觉。这里许多人应该会想到AOP,我认为AOP适合于那些“过度”调用的功能,而不 适合非平凡调用。我认为,AOP本身就比较复杂,如果为了AOP就去AOP显然提高学习成本和项目难度。我认为,使用最简单,最大众化的技术去解决实际的问题才是最好的选择。所以,我晚上会翻阅JSP,SERVLET,JDBC的书籍或者资料,但是我从不会在实际中去使用它们去搭建系统。当然,上面那个是我最“正式”的分层结构,我还使用了别的变形,这里就不多说了,我的目的很简单,我只想告诉一些激进的牛人,我们学生并非只知道你们所认为的SSH。我也说了一些我为什么要去使用SSH的问题。


        关于EJB3.0的问题.
       我在读书的时候,EJB2.0那会我应该还在初中或者高中,我根本没有时间接触,所以对它们不太了解。但是EJB3.0,我这里有本《EJB3.0 IN ACTION》的书,偶尔翻阅,做做DEMO,也算了解,SPRING几乎都可以做,所以我没怎么去下太大的工夫,让我不爽的就是它的部署。不过由于它回归POJO,而且数据持久层使用了HIBERNATE,所以还是比较爽的,不会在像(资料了解):写那么多无聊的配置,DTO,接口寻址,等这些问题。

关于DWR,等问题。
我用DWR的机会不多,只用过2次。所以也没什么特别的心得。

应用服务器的问题:
我最爱TOMCAT,可以集群,性能不差,简单方便,没有别的理由让我不用它。

SPRING,EJB的问题:
我喜欢SPRING,没别的想说了,如果问我理由,太多。特别喜欢WITHOUT EJB那本书。当然了,还有SPRING IN ACTION。


框架这东西也没什么好谈的了,我用的就是这些平常的,能给我做足够的事情,就OK了。我更大众化。或者,我太菜,就像某些人说的:学生,只会吹。就会SSH。没了。


本来一开始打算写更多的东西,想想还是算了,也没那个必要。要写的太多,管理,设计,需求模型,包括产品的问题。技术与市场的问题。不写了,我想我写那么多就够了,学生并非你所想的一无是处,而且,有些东西我感觉我写不出来,写1年吧,也许可以,但是,有些东西,只有自己体会了才知道。好了,就此搁笔。PS:让暴风雨来的更猛烈些吧,请牛人们尽情的拍砖吧。


            最后,我们是学生,不容易,学校不教,我们只能自己摸索,老师在干什么?我们能会一点已经很不错了,您的批评,有想过我们吗?我们也是人,我们是菜鸟,您是牛人,您可以给我们建议,学什么,怎么学,但是请不要在无聊的批判了,您没上过学吗?我要学的东西还有很多,有许多东西并不是技术上的.我每天都在学习,每天进步一点,学生,不是你所想的,只会上网玩游戏,泡MM,无聊等等。如果你因为我帖子发错了地方而投了隐藏帖,那么我无话可说!
   发表时间:2009-06-19  
我记得老比尔盖茨说过,这世界没什么是公平的,要学会接受!
0 请登录后投票
   发表时间:2009-06-19  
rover_y 写道
我记得老比尔盖茨说过,这世界没什么是公平的,要学会接受!



我等了一个小时了,终于有同人回复了。谢谢您的回复。
0 请登录后投票
   发表时间:2009-06-19   最后修改:2009-06-19
在读大学生再次表示:下个项目肯定不会用ejb/Hibernate/JPA/Struts/spring/freemarker/velocity/dwr。。。。

顺便求libzfs的tutorials和reference...
0 请登录后投票
   发表时间:2009-06-19  
mikeandmore 写道
在读大学生再次表示:下个项目肯定不会用ejb/Hibernate/JPA/Struts/spring/freemarker/velocity/dwr。。。。

顺便求libzfs的tutorials和reference...


一般我根据需求选择技术,不会自己添加太空需求。
0 请登录后投票
   发表时间:2009-06-19  
  SSH谁都没有说不好。 只是停留在培训学校或者教学视频的程度的话。 。。 这种人你跟他聊两句就知道他的水平。

  所以广泛面试大牛们在接收到太多精通SSH的简历之后,聊过太多人之后。 渐渐对精通SSH形成了一种恐惧。 因为就一个Hibernate也得你不少时间吧。 你一应届生就敢说自己精通SSH 。 那么既然你精通SSH 。 那必然精通Java。  来讲讲 classloder 。 讲讲 mem收集算法。 讲讲bytecode。 在这个层面上就废掉了。就别提SSH了。

  大家批的是简历要谦虚。 并不是说应届生一无是处。向楼主这种大牛也是广泛存在的。我始终认为。 一个人要是能长期浸淫在JE这种社区的氛围中。 那他一定不会差。(除过上来晒简历那种。。)据我长期观察。 能上JE的学生在学校里面不说拔尖。也都是上层。但是不排除有些人就自视清高。就敢把简历写的天花乱坠。学生里面敢写精通Java这种人。是该受到鄙视的。

  最后求证一下。楼主的一百多本书是怎么看下来的。 我才20本左右。 最好让我follow 一下楼主的豆瓣。 or twitter 。 看看你最近再看哪些书。
0 请登录后投票
   发表时间:2009-06-19  
treblesoftware 写道
mikeandmore 写道
在读大学生再次表示:下个项目肯定不会用ejb/Hibernate/JPA/Struts/spring/freemarker/velocity/dwr。。。。

顺便求libzfs的tutorials和reference...


一般我根据需求选择技术,不会自己添加太空需求。


有时候技术不是你自选的。。。。
我这次担心他们会不会强迫我们用jsf和webservice搞。。。。那么我们就彻底败了。。。
0 请登录后投票
   发表时间:2009-06-19  
mikeandmore 写道
treblesoftware 写道
mikeandmore 写道
在读大学生再次表示:下个项目肯定不会用ejb/Hibernate/JPA/Struts/spring/freemarker/velocity/dwr。。。。

顺便求libzfs的tutorials和reference...


一般我根据需求选择技术,不会自己添加太空需求。


有时候技术不是你自选的。。。。
我这次担心他们会不会强迫我们用jsf和webservice搞。。。。那么我们就彻底败了。。。


没关系,一边学一边做。
0 请登录后投票
   发表时间:2009-06-19  
treblesoftware 写道
mikeandmore 写道
treblesoftware 写道
mikeandmore 写道
在读大学生再次表示:下个项目肯定不会用ejb/Hibernate/JPA/Struts/spring/freemarker/velocity/dwr。。。。

顺便求libzfs的tutorials和reference...


一般我根据需求选择技术,不会自己添加太空需求。


有时候技术不是你自选的。。。。
我这次担心他们会不会强迫我们用jsf和webservice搞。。。。那么我们就彻底败了。。。


没关系,一边学一边做。

靠。。。那个东西我们学完了,也就该验收了。。。。
看着就觉得头痛,出奇的臃肿。。。

本身功能很简单的东西用了那个东西就纯粹吧问题复杂化了。。。
0 请登录后投票
   发表时间:2009-06-19  
Saito 写道
  SSH谁都没有说不好。 只是停留在培训学校或者教学视频的程度的话。 。。 这种人你跟他聊两句就知道他的水平。

  所以广泛面试大牛们在接收到太多精通SSH的简历之后,聊过太多人之后。 渐渐对精通SSH形成了一种恐惧。 因为就一个Hibernate也得你不少时间吧。 你一应届生就敢说自己精通SSH 。 那么既然你精通SSH 。 那必然精通Java。  来讲讲 classloder 。 讲讲 mem收集算法。 讲讲bytecode。 在这个层面上就废掉了。就别提SSH了。

  大家批的是简历要谦虚。 并不是说应届生一无是处。向楼主这种大牛也是广泛存在的。我始终认为。 一个人要是能长期浸淫在JE这种社区的氛围中。 那他一定不会差。(除过上来晒简历那种。。)据我长期观察。 能上JE的学生在学校里面不说拔尖。也都是上层。但是不排除有些人就自视清高。就敢把简历写的天花乱坠。学生里面敢写精通Java这种人。是该受到鄙视的。

  最后求证一下。楼主的一百多本书是怎么看下来的。 我才20本左右。 最好让我follow 一下楼主的豆瓣。 or twitter 。 看看你最近再看哪些书。


谢谢您经常关注我,你的头像不错。
JAVA我只能算熟练,许多东西还掌握的不行。
关于书籍,都是自己买,一般实在太无聊了,怎么办?座车去买书,呵呵,之后看看。翻着翻着太累就睡着了。我就2个博客,一个XIAONEI,一个JE。 关于看书的秘诀,还真没有。就是感觉不看就不舒服,大概已经把看计算机书籍养成了习惯了吧。
0 请登录后投票
论坛首页 招聘求职版

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