クラス名にParserをつける間違い

 商品の情報を表す文字列をコンストラクタの引数で受け取り、商品名や商品コード、製造業者などを取得できるクラスに名前をつけるとしたら、どのようなクラスになるでしょうか。

 たとえば次のように使うクラスです。

const instance = new SomeClass('ワンダースワン,バンダイ,WSWN');
console.log(instance.name); // ワンダースワン
console.log(instance.makerName); // バンダイ
console.log(instance.code); // WSWN

 これにProductParserクラスという名前をつけるのは間違いです。たしかに文字列を解析(parse)しているのですが、それはメソッドの名前のつけ方とクラスの名前のつけかたを混同しています。文字列を解析するのは、コンストラクタ内の処理にすぎません。newでインタンス化が済んだら、それ以降は何も解析していないのです。

 適切な名前は「Product」です。商品名などを取得できるということは商品名などをデータとして保持していることを意味しますので、商品クラスです。

 同じような他の例で、日付を表す文字列を受け取り年や月や日を表すクラスがあります。このようなクラスは多くの場合、DateParserクラスではありせん。日付を表す文字列を解析するのはコンストラクタ内でしかないためです。ではどういう名前がついているかというと、大抵Dateクラスという名前がついています。日付を保持しているためDateクラスです。

 それでは、DateParserクラスと名前をつけるのはどのようなクラスなのか。日付を解析するためのオプションをデータとして保持し、parseメソッドを呼び出すとDateクラスを返却するようなクラスです。