- PR -

クラス名のネーミングについて(Builder? Factory?)

1
投稿者投稿内容
Jumpin'' Jack Flash
大ベテラン
会議室デビュー日: 2006/01/24
投稿数: 198
投稿日時: 2006-05-24 12:48
RSSドキュメントファイルからJavaオブジェクトを
構築するクラスがあります。
このクラスの名前は、
RSSBuilder ですか?
RSSFactory ですか?
この使い分けがわかりません。
staticなメソッド create()かbuild()があるだけです。
シグニチャは、RSS create(File file);

また逆に、
JavaオブジェクトからRSSドキュメントファイルを
出力するクラスは何とネーミングすればよいですか?

よろしくお願いします。
しゅう
会議室デビュー日: 2004/02/07
投稿数: 7
投稿日時: 2006-05-24 13:03
serializer、deserializerなんてのもありかな〜と思います。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-05-24 13:22
正方向の変換と逆方向の変換が対になっているのならば、名称も対を意識したほうが良いと思います。
Importer/Exporter, Encoder/Decoder,... など。

引用:

Jumpin' Jack Flashさんの書き込み (2006-05-24 12:48) より:
シグニチャは、RSS create(File file);


例で出されただけだろうと思いますが、入力をファイルに限定してしまうと拡張性が乏しくなりますので、String や Stream などで引き渡すほうが良いかもしれません(これは名前付けより難しい問題ですが)。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
ゴングラッチェ
常連さん
会議室デビュー日: 2006/03/03
投稿数: 36
投稿日時: 2006-05-24 13:31
「JavaオブジェクトからRSSドキュメントファイルを出力するクラス」
こっちを「RSSBuilder」と名づけたい私がいたりします。
「RSSドキュメントファイルからJavaオブジェクト構築するクラス」
こっちは「RSSFactory」と名づけたい私がいますよ。

RSSBuilder:RSSドキュメントファイルを作り上げる建築家
RSSFactory:RSSドキュメントファイルを使ってオブジェクトを製造する工場
良いか悪いかはわからんとです。
luckseed
常連さん
会議室デビュー日: 2006/05/23
投稿数: 24
投稿日時: 2006-05-24 13:50
RSSBuilderかRSSFactoryだったら、RSSBuilderでしょうね。
僕なら場合によってRSSParserにするかもしれませんが。
RSSドキュメントファイルを出力するクラスは、RSSTransformerとか。

Factoryは、FactoryMethodパターンを使用するクラス名によく使われます。
その場合は、RSSBuilderFactory等。

javax.xml.parsersやjavax.xml.transformなど、XML関係のライブラリを参考にするといいかも。

[ メッセージ編集済み 編集者: luckseed 編集日時 2006-05-24 14:34 ]
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-05-25 10:15
該当クラスがBuilderパターンを使っているならRSSBuilder、
AbstractFactoryかFactoryMethodパターンを使っているならRSSFactoryでしょうか。

デザインパターンを知っている人ならXXBuilderと名づけられていると
Builderパターンだな、と思って見てしまうでしょうから、
クラスの構成に即した名前にしておくのが無難かと思います。

比較的パターン名を接尾辞にして名づけられることが多いのは
Iterator、Observer、Strategy、Builderあたりでしょうか。
Proxy、Adapterあたりはデザインパターン抜きで命名されている
ケースも多いと思います。
Jumpin'' Jack Flash
大ベテラン
会議室デビュー日: 2006/01/24
投稿数: 198
投稿日時: 2006-05-25 15:50
皆様、多くのご意見ありがとうございます。
いろんな意見があるものだなぁと思いました。
非常に参考になりました(実際は、余計に悩んでますが...)。
ネーミングって正解がないのでしょうが、こだわりたいところです。

少々長くなりますが、お付き合いいただける方は、よろしくお願いします。

要件をもう少し述べますと、
RSSドキュメントには、大きく分けて1.0と2.0という別のフォーマットがあり
ます。さらにAtomというフォーマットもあります。どのフォーマットであって
も読み込み、フォーマットに依存しないJavaオブジェクトを構築します。
逆変換は、出力を行うクラスをかえることによってそれぞれのフォーマットで
出力します。

切り口として、2つ挙がりました。
1. XML関係のライブラリを参考にする
2. デザインパターンに従う

1について

今回の「RSSドキュメントファイルからJavaオブジェクト構築するクラス」は、
javax.xml.parsers.DocumentBuilder
に近いと思いました。
■一般的なパース処理(DOM)
コード:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setXxx(xxx);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(file);


Documentオブジェクトを構築するからDocumentBuilderですから、
今回はRSSオブジェクトを構築するので、RSSBuilderで良いのかなと思いました。

疑問として、DocumentBuilderのインスタンスをDocumentBuilderFactoryからしか
生成させない理由がわかりません。

今回、XMLの解析には、XercesのSAXPerserを使っています。
■一般的なパース処理(SAX)
コード:
XMLReader parser = new org.apache.xerces.parsers.SAXParser();
RSSHandler handler = new RSSHandler();
parser.setContentHandler(handler);
parser.setErrorHandler(handler);
parser.parse(new InputSource(new FileInputStream(file)));
RSS rss = handler.getRSS();


RSSHandlerこそ、今回の「RSSドキュメントファイルからJavaオブジェクト構築
するクラス」です。

Perserという名前だとそのクラスの仕事は解析で、オブジェクトを構築するのは
他人の仕事のように聞こえます。
Perser+Handler=????←これを何と名付けるかといったところでしょうか。

「JavaオブジェクトからRSSドキュメントファイルを出力するクラス」については、
javax.xml.transform.Transformerが近いと思いました。しかし、Transformerは、
xsltで変換するのでTransformerなわけで、今回のように決めうちで出力する場合
は、Printerでしょうか?
Writerだと、Writerインターフェースを実装しているみたいだし...

2について

Builderパターンについて調べてみたのですが、疑問があります。
上述のDocumentBuilderクラスは、Builderパターンでしょうか?
Builderパターンで言うところのDirectorクラスとBuilderクラスが1つになって
いるように見えます。XMLの内容は様々ですがXMLの構造自体は多様性がないので
1つにまとめちゃったということでしょうか。
RSSの場合、フォーマットに多様性があるので、RSS10Builder、RSS20Builder、
AtomBuilderなど作りたいところです。また、別バージョンが登場するかもしれ
ないですから。そうすると、DirectorクラスとBuilderクラスを分けた方が良い
気がします。そういう設計思想であっているのかな?

「JavaオブジェクトからRSSドキュメントファイルを出力するクラス」について
ですが、この要件に合うデザインパターンはありますか?
BridgeかStrategyでしょうか。これらはクラス名として使うにはふさわしくない
ような気がします。

引用:

例で出されただけだろうと思いますが、入力をファイルに限定してしまうと拡張性が乏しくなりますので、String や Stream などで引き渡すほうが良いかもしれません(これは名前付けより難しい問題ですが)。



そうですね。実際は、思いつく限り定義してあります。
・public static RSS build(String text);
・public static RSS build(File file);
・public static RSS build(URI uri);
・public static RSS build(URL url);
・public static RSS build(InputStream stream);
・public static RSS build(InputSource source);
Adaptorパターンですぅ。

#WriterからInputSourceを作ってパースすると日本語が文字化けぇ
#あと、DataInputからもパースできたら完璧ぃ
未記入
常連さん
会議室デビュー日: 2005/05/07
投稿数: 32
投稿日時: 2006-05-25 16:11
単なる双方向コンバータかもしれませんよ。

片方向ならRSS2Obj、Obj2RSSとしたかも。

[ メッセージ編集済み 編集者: 未記入 編集日時 2006-05-25 16:12 ]
1

スキルアップ/キャリアアップ(JOB@IT)