• ベストアンサー

struts2とspringとの連携のメリットが分らない

ので教えてください。 アプリケーションコンテキストを得るために struts2とspringが連携していない場合は ApplicationContext appContext=new ClassPathXmlApplicationContext("ApplicationContext.xml"); の1行でできますが、 struts2とspringが連携している場合は ActionContext context=ActionContext.getContext(); Map<?, ?> map=context.getContextMap(); ServletContext application=(ServletContext) map.get(StrutsStatics.SERVLET_CONTEXT); WebApplicationContext appContext=(WebApplicationContext) application.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); の長文の4行になります。 勿論この場合は最初の方法も使えます。 struts2とspringを連携しないほうがspringを簡単に使えるように思います。 設定ファイルの記述やプログラムコードが長くなるのにもかかわらず、 敢てstruts2とspringを連携するメリットを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.2

struts2(画面)->spring2.5(Business Logic)->Hibernate(Data Access Object) なだけですよね? それぞれが依存性がないPOJOで作成することができるため、 単体テストにおいて、テスト対象モジュール以外が未作成でも テスト可能というのが最大のメリットです。 単純に考えると、 Business Logicにて複数のエンティティを同時に更新することがなければあまり重要となることはないですが、 バージョンアップやポーティング対応で struts2を他の画面系Frameworkに、 Hibernateを他のData Access Object Frameworkに差し替えた場合に、 他の部品をを修正する必要がないため、 工数が削減できると考えられます。

reiman
質問者

お礼

ありがとうございます。 テストが簡単にできる フレームワークやORマッピングの変更が用意になる ということですね フレームワークの変更は現実的でないと思いますが 開発規模が大きいとそれなりに大きくなりそうですね。

その他の回答 (1)

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

>>敢てstruts2とspringを連携するメリットを教えてください。 システム開発は、開発をしていく途上で、またリリース後に仕様が変わることが多いと思います。このとき、「ちょっとした軽微な修正が1カ所発生した!」ということがよくあります。その影響が予想外に、玉突き的に多くのモジュールに影響することもよくあると思います。 そのとき、JavaやJspのソースを何本もメンテする必要が発生するよりも、最初は作るのが大変でも「1カ所の修正はしょうがないが、連携しているので他のソースを修正しないでもいい」となれば嬉しいのではないでしょうか?つまり開発中やその後のメンテが楽になる(かもしれない)というメリットを狙っているのではないでしょうか。 ただ、個人的な印象では、例にあげられた1行を長ったらしい5行に置き換える価値はあるのか?プログラマ的に損得勘定としてどうなの?(センス悪ーい!)とか、「連携しているから、1カ所で済む修正が、さまざまな多数のモジュールの修正を逆に呼び込んで大変になるのでは?」なーんてJavaの初心者は思ってしまいますけどね。

reiman
質問者

お礼

ありがとうございます。 最初の環境設定、設定ファイル作成、初期のコードの記述 において多少導入が大変でも後は少し楽になり、メンテにも有利ということでしょうか。 大勢で開発しているや規模の大きいものを開発している場合は導入で苦労する人は一人であり苦労するのは開発期間からすればとるの足らないので 全体として導入コストはペイできるということですね。 逆にいえば 少人数、小規模でプログラミングする場合は連携するまでもないと言うことですね。 目的がSpring+Hibernateの機能でデータベースアクセスをDAOにより行うためだけならば連携をするまでもないですね。 有難うございました。

関連するQ&A