Home > Technologies > SpringMVC 初步觀感

SpringMVC 初步觀感

January 31, 2006 (Tuesday) Leave a comment Go to comments

最近在看 SpringMVC,又一個 MVC framework。現在市場上有名的 MVC framework 有 Struts、WebWork、Tapestry 、JSF 和 SpringMVC。
初步看過 SpringMVC 的 Turtorial 以及一些介紹文章、也大略看過 API doc 跟 taglib doc。對 SpringMVC 目前的感覺是還不錯用。
SpringMVC 主要是 follow Struts 的概念,把 framework 的主力放在 Controller 上。在 Controller 的設計上比 Struts 有彈性,也不必使用 framework aware 的 domain object (ActionForm in Struts)。SpringMVC 提供多種不同的 Controller 讓 user 因應不同的情況去使用,不過這也正是問題之一,如何正確選擇合適的 Controller 呢?而且它常用的 SimpleFormController 是一個經過好幾層繼承,要充份的運用這些 concrete implementation 必需要對所有的父類別都有一定的認知。這裡有一篇文章對每層的功能作了一個不錯的簡介,http://www.ociweb.com/jnb/jnbOct2004.html。這個設計其實不錯,因為保留了設計特定 Controller 的機會,視情況由不同的層級切入去實作。
在 Model 上 SpringMVC 是可以把 parameter mapping 到 pojo 或是只是簡單的把 input parameter 作包裝,這點比 Struts 的 ActionForm 要乾淨多了,但是會不會有其他的問題還需要使用後才能下結論。
在 View 的部份 SpringMVC 沒有限定使用哪一種 template engine,所以 JSP、Velocity 等等都可以自由使用。跟 Struts 不同的是 SpringMVC 幾乎不提供自己的 taglib (Struts 有一堆 struts-bean、struts-logic、struts-html … )。SpringMVC 只有幾個簡單的 tag,主要只是要告訴 framework 如何把 html 的 input parameter binding 到 Model 去,tag 的設計方式是 nested 的方戈心一式,裡面是自行填入原有的 html input type。雖然沒有經過測試,不過大概對 page design tools 的支援會比 Struts tag 好多了 (看到不懂的 nested tag ignore 的話就是平常的 html 了)。
設定可能是 SpringMVC 的敗筆吧,誇張的設定檔 (Spring 的一貫作風?) 讓人蠻煩的。設定這些東西的時間人家用 Ruby on Rails 早就做好整個系統了。但是的確可以保留了很大的靈活性。或許可以自行設計一些類似 auto proxy 的東西,自動套用一些基本設定?
最後值得一提的是,其他 framework 目前跟 Spring 的整合大都是 out of scope 的整合,以 Struts 為例,就是把 Action 當作 Spring 的 client 去 request spring bean。雖然也有 in scope 的方法,但大都比較麻煩。SpringMVC 不用說本來就在 Spring 的 scope 裡面,也就是馬上就可以使用 IoC、AOP 等等 Spring 的功能。
總結來說,目前都 SpringMVC 的評價是蠻正面的,尤其它的 AbstractWizardFormController 更是讓人眼前一亮。至於它的缺點,目前預估應該在深入研究後可以有解決之道,至少那並不是 framework design 上的缺失。

Advertisements
Categories: Technologies
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: