/note/tech

クラスとしてのControllerは別にいいんだけど、ディレクトリとしてのcontrollers/ディレクトリは微妙で...

クラスとしてのControllerは別にいいんだけど、ディレクトリとしてのcontrollers/ディレクトリは微妙で、そこにFormもServiceもおきたいので、applicationとかにしたいと思ったことはある

@a_suenami

Rails だと app/application になるけどw

@a_suenami

こんな感じの構成にしたいんですよ

app/application/articles/controller.rb

app/application/articles/service.rb

app/application/articles/register_form.rb

app/application/articles/updatte_form.rb

app/application/articles/index_table.rb

@a_suenami

まあ、なんならview templateもここに入れたいけど、HTMLを書くのはエンジニアじゃなくてデザイナーみたいなこともあるから app/views だけはまあいっかーっていう感じ(経験的にだけど

@a_suenami

前にも同じこと言ったけど、HogeControllerとHogeServiceを同じモジュールとして扱ったほうが高凝集であって、HogeControllerとFugaControllerをまとめる意味はあまりないと思うんですよ

凝集度の観点からも、例えばuserServiceとinvoiceSerivceが同じパッケージ下にあっても低凝集ですしね。

@a_suenami

@a_suenami

コンポーネントの種類ごとに名前空間が定着したのはMVC2アーキテクチャなWEBアプリケーションが流行してからだった気がしないでもない。

それ以前はふわっとした機能レベルの名前空間を持つ構造のシステムも多かった気がする(単に設計の概念が無かった可能性もある)。

ドメイン的な関心事で(大雑把な)アプリケーションを構築してしまうのは、DjangoやFlaskのようにプロジェクトの下に複数のアプリケーションが配置される考え方が近いだろうか。

個人的にはコンポーネントごとに名前空間を切る方が好きだが(ドメイン的な関心事はアプリケーション自体を分割してマイクロサービス化したい)。