两道小面试题的背后:深入理解mvc

跟同学聊了通电话,讨论了一下需求理论,架构,软件扩展性方面的东西。好吧。。。搞硬件的跟搞软件的瞎聊一下这个好象也不奇
怪。
软件易扩展属于开发质量要求。这样一些非功能性需求往往很重要。理论其实很重要,嗯,从两道面试题说起,面试官都喜欢问,嗯,
俺也喜欢问。遗憾的是没听到过想要听的答案。
1,重定向redirect和内部跳转forwar有什么区别或在什么场景使用?
   求职者多半的回答是redirect是浏览器执行的跳转动作,好吧给8分9分的也行。 forward是应用服务器内部跳转,属同一个
request好吧,给10分也行。网上的面试宝典答案也跟这个类似。    没毛病。但不甚满意。redirect本质是应用服务器通过http协
议发出一个html文本,里面包含refer:URL指令,浏览器解析到这个指令后跳转到那个URL。嗯,至少了解http原理,给10分。forward
确实是内部跳转,可是怎么用颇值得探讨一下。我们知道设计模式中的简单工厂类经典实现是 if(1) return 产品1 ; else return 
默认产品; 。 那forward所在控制器类能否扮演一个简单工厂类的角色呢?if(1)forward 控制器1; else forward 控制器2; 应用场
景举例,比如我有一个产品查询页面,有两种不同的实现方式,一种是通过solr引擎检出,一种是数据库直接检出结果。通过forward
,可以把两种实现同时写到产品里。可配或者根据不同条件用不同的解决方案。这样就变成了 (页面A,控制器A ,serviceA),(页面A,
控制器B,serviceB)。两个组件共用一个页面A。 因为是两个组件,扩展性自是极好的,比如我们还可以增加一个内存数据库查询结果
的解决方案,而只用简单的修改一下 forward所在的控制器类。简单工厂模式加策略模式的组合应用。理解设计模式和组件的概念,
有思考,嗯,给12分。
2,mvc模式中的m,v,c 分别指什么?
   m就不必多说。但是v就很值得思量。 一般的回答是jsp和swing. 这种说法很片面,也可以说没理解mvc。 v指view,翻译是视图,貌
似jsp和swing的回答没毛病,网上也多说是这个。但v准确的理解应该是边界,即和系统交互的一切东西。比如触发某个任务的时钟,
调用系统的某个外部系统,人机交互的界面等.这样子的理解,即使没有界面的功能也同样适用mvc. c也有讲究,就不说了。
    编程确实是一种艺术,但是很多东西都很抽象,理解了就是一种思想,没理解或不通透就是一种工具。搞程序的和搞硬件的我想
理论比经验更重要。因为经验有可能是错的,理解透了的理论则不
会。

猜你喜欢

转载自blog.csdn.net/foolone/article/details/80980880