今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

継承元別のパッケージはムダ

Webシステムで、actionとformとfilterとdaoっていうパッケージがあって、それぞれにシステムの全てのActionなりActionFormなりFilterなりDAOなりが入ってたりする。
(snip)
プログラムの仕組み的な機能で分けるんじゃなくて、業務的な機能で分けるべきです。

なぜ多くの人がそうしているのかっていうと、雑誌や入門書などのサンプルプログラムがそうなっているからでは?
Web 関係には疎いので趣味で Struts を勉強した範囲しか知らないが、パッケージを分けていないか、またはそのようにパッケージを分類しているサンプルばかりだったように思う。パッケージを分けていた場合は、どれもこんな感じ。

jp.sample.action
jp.sample.form
jp.sample.model

だからといって、サンプルにはあまり罪はない。サンプルでは、非常に簡単な機能をひとつだけ実現しているのだから、機能別にパッケージを分割する必要性がないからだ。そのようにパッケージを分けたサンプルの作者はそれなりの理由で分けたんだろうし、機能別にパッケージを分けるという「より良い」方法を思い当たらなかったんだろう。
実際のシステムではどうかというと、システムの規模によっても違ってくるから一概に悪いとも言えないような気がする。