高凝集低結合

わかりやすい配置 - しんさんの出張所 はてなブログ編

 思わずトラックバックしてしまいましたが、自分もid:shinさんと同じく後者の配置が好きで、自分がパッケージの構成を決めれる状況であれば後者を採用してます。しかし、そうではないプロジェクトではやはり前者のパッケージ構成しかみたことがないです。
 id:shinさんはアクションとアクションフォームの関係を例に出されていますが、これってサービスとドメインの関係でも言えると思うんですよねぇ。そもそもドメインモデルを採用するプロジェクト自体少ないと思いますが*1ビジネスロジックを実装したドメインクラスの配置場所がサービスクラスと同じ階層レベルに配置されてあったり。↓みたいな感じで。

  • hoge.service
    • EmployeeService
    • CompanyService
  • hoge.domain
    • EmployeeDomain
    • CompanyDomain

こういう場合も

  • hoge.employee
    • EmployeeService
    • EmployeeDomain
  • hoge.company
    • CompanyService
    • CompanyDomain

という感じに自分だったらします。パッケージレベルでいわゆる高凝集低結合を実現させるために*2
ただ、こういう事を他の人に話すと
「えー、逆にめんどくさくね?」
「もう慣れちゃったから」
「そもそも高凝集低結合にどれほどの価値が?」
って言われますw。
そもそも自分の高凝集低結合の概念が間違ってるのかなぁとも思ってたりしますが、どうでしょう?
上の例だけだとどうとでも取れますかね??
まぁ、結局「ケースバイケース」って感じでしょうが、自分の理解が間違ってたらご指摘いただけると嬉しいです。

*1:あくまで個人的な体験を元にする感覚です

*2:そういやJSRでパッケージ間のアクセスを厳密にする方法があったはずですが、あれってJava7に取り込まれることになったのかな??あとで調べます