質問: [] # (省略)categoryやtitleを見ながらなんらかのロジックで10個のArticleをarticlesにつめる処理 return articles ``` たとえばこんなのが考えられるかなと。 1. 単純に複数のArticleを扱うからArticles(これは一番最悪ですかね?) 2. 色々管理するから、AricleManager 3. もっと意味をカラフルにしてArticleSelector, ArcicleEditor, ArticleRecommenderなど もちろんこのクラスが呼び出される文脈などの前条条件によるよって話はあると思います。 適当に仮定をおいてもらって答えてもらってもいいですし、ジェネラルな範疇での回答でも構いません。 とあるクラスを複数個管理するクラスのクラス名は、上の例に限らず前からかなりの回数困っているので、皆さんのアドバイスを伺いたいです。よろしくおねがいします。
回答: Rails であれば、 @sanadan さんの回答で必要十分かとは思います。一方、いくつかの言語を並列して挙げられているので、なるべく汎用的なクラス命名の関する答えが欲しいのかな、とも思っています。 クラスをどのように命名して、プログラムを整理していくかの話で、そこそこ重要になる知見は、個人的には DDD であると思っています。 DDD の意義や意図は別の記事などに譲るとして、そこでひとつ特徴的だなと思うのは、「永続化を取り扱うクラスに対して Repository というクラスを命名する」だと思います。 つまり、今回のケースでの "generate_good_articles" メソッドについてですが、これはおそらく、データベースから "good" な article を引っ張ってくるメソッドなのかな、と思っています。それは、必然、データベースにどのようにデータが格納されているかについての情報を知っていないと、実装することは難しそうだと推察できます。 そのように、データベースについての知見を持っていて、実際に、ドメインのオブジェクトである Article たちをデータベースの情報から構築するクラスは何かを考えた場合、なので DDD 的には、このクラスは ArticleRepository なのではないかな、と思っています。 追記として、今回の例示されているコードは python だと思っています。 python だと、永続化のライブラリとして、一番有名なのは sqlalchemy であると思っています。 sqlalchemy であった場合、 generate_good_articles のシグネチャは以下のようになると思っています。 ``` // クラスではなくただの関数 def generate_good_articles(session): articles = [] // session を用いてなんらかの select を行うコード // session.query(Article) 的な。 return articles ``` このようにコードを整理していくと、もしかしたらクラスを作る必要はないかもしれません。全体の設計次第ではありますが。