山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

Serviceはどこから出てきたのか?

JavaのWebアプリケーションではServiceクラスを

作るのが一般的のようです。

新しく入った人や外注の人はよくやります。

しかし私はだいたいダメ出しをします。

保守性に問題がある場合が多いからです。

なんでこういう作り方をする人が多いか考えてみました。

1つはEJB時代のSession Facadeパターン。

EJBはリモートメソッドになるので通信を最小限に

するようにしましょうというパターンとしてSession Facade

というのがありました。

そうすると一連の処理を1メソッドにするようなパターンに

なります。

これはこれで目的がはっきりしているのでいいと思います。

しかしリモートメソッドでない場合はこうする必要がありません。

もう1つはStruts1で単体テストをするために画面の処理を

切り出すというものです。

JUnitのテストではサーブレット環境でないのでrequestやsessionが

扱えません。

そのためActionから処理部分を切り出してPOJOのServiceとして

JUnitでテストできるように作ろうというものです。

これも目的がはっきりしています。

こういうServiceクラスならわかります。

しかし私が見るソースの場合Actionに相当する部分にも

ビジネスロジックがあったり、そもそもJUnitでテストして

いなかったり、どういう基準でServiceにしているのか

わからない場合が多いです。

なんとなく形だけまねしているように思います。

さらにStruts2ではActionクラスがPOJOなのでJUnit

テストする場合も切り出す必要がありません。

ということで私はServiceクラスのようなパターンは今は

必要ないと思っています。

でもSpringのサンプルソース見るとそんな作りに

なってるんですよね。

なんなんだろう。