質問: ActiveRecordのモデル(テーブル構造と1対1の属性を持つクラス)以外のクラスはどこのディレクトリにどういう規約で置くべきでしょうか。 現在は、 app ↳models ↳callbacks ↳services ↳view_objects ↳decorators ↳values ↳controllers ↳assets ↳apis ↳jobs ↳converters ↳helpers ↳mailers ↳views といったディレクトリ構造をしています。 ただ単にクラスと言っても抽象的だとは思うのですが、例えばデザイン・パターンで言うところのファクトリーや、プロキシー、ストラテジー等といったオブジェクトの生成やアルゴリズムを委譲させるためのクラスなどをイメージしております。
回答: 「デザイン・パターンで言うところのファクトリーや、プロキシー、ストラテジー等といったオブジェクトの生成やアルゴリズムを委譲させるためのクラス」はRailsでは特に規約を決めていないので、「開発者の自由」という回答にしかならないと思います。 すでにservicesやview_objectsなど、非デフォルトなディレクトリをapp以下に作っておられるようなので、その延長線上で factories や proxies のようなディレクトリを作れば良いのでは?とも思います。 あとは同じようなコンセプトのネット記事やGitHubのコード等を探して参考にする、といったところでしょうか。 例: RailsでDDD - Qiita ただし、特別な理由がない限り、Railsは「Railsのレールに乗る(=規約から外れずに作る)」のが一番開発効率が良いと思います。 レールから外れると、変なところでハマったり、使いたいgemが動作しなかったりして、かえって時間が掛かることも多いです。 また、チームで開発している場合はきちんと認識やルールを合わせておかないと、単なる「オレオレ実装」になって他の開発者が困る原因にもなります。 「超大規模なサービスを開発している」とか「学習目的で試しにやってみたい」といった理由でなければ、「レールに乗る」ことを最優先した方が良いと思います。 (ちなみに、僕ももともとJavaやC#をやってたので、最初はレールから外れたくなることがよくありました。)