- - PR -
クラス名のネーミングについて(Builder? Factory?)
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-24 12:48
RSSドキュメントファイルからJavaオブジェクトを
構築するクラスがあります。 このクラスの名前は、 RSSBuilder ですか? RSSFactory ですか? この使い分けがわかりません。 staticなメソッド create()かbuild()があるだけです。 シグニチャは、RSS create(File file); また逆に、 JavaオブジェクトからRSSドキュメントファイルを 出力するクラスは何とネーミングすればよいですか? よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-05-24 13:03
serializer、deserializerなんてのもありかな〜と思います。
| ||||||||||||
|
投稿日時: 2006-05-24 13:22
正方向の変換と逆方向の変換が対になっているのならば、名称も対を意識したほうが良いと思います。
Importer/Exporter, Encoder/Decoder,... など。
例で出されただけだろうと思いますが、入力をファイルに限定してしまうと拡張性が乏しくなりますので、String や Stream などで引き渡すほうが良いかもしれません(これは名前付けより難しい問題ですが)。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||||||||||
|
投稿日時: 2006-05-24 13:31
「JavaオブジェクトからRSSドキュメントファイルを出力するクラス」
こっちを「RSSBuilder」と名づけたい私がいたりします。 「RSSドキュメントファイルからJavaオブジェクト構築するクラス」 こっちは「RSSFactory」と名づけたい私がいますよ。 RSSBuilder:RSSドキュメントファイルを作り上げる建築家 RSSFactory:RSSドキュメントファイルを使ってオブジェクトを製造する工場 良いか悪いかはわからんとです。 | ||||||||||||
|
投稿日時: 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 ] | ||||||||||||
|
投稿日時: 2006-05-25 10:15
該当クラスがBuilderパターンを使っているならRSSBuilder、
AbstractFactoryかFactoryMethodパターンを使っているならRSSFactoryでしょうか。 デザインパターンを知っている人ならXXBuilderと名づけられていると Builderパターンだな、と思って見てしまうでしょうから、 クラスの構成に即した名前にしておくのが無難かと思います。 比較的パターン名を接尾辞にして名づけられることが多いのは Iterator、Observer、Strategy、Builderあたりでしょうか。 Proxy、Adapterあたりはデザインパターン抜きで命名されている ケースも多いと思います。 | ||||||||||||
|
投稿日時: 2006-05-25 15:50
皆様、多くのご意見ありがとうございます。
いろんな意見があるものだなぁと思いました。 非常に参考になりました(実際は、余計に悩んでますが...)。 ネーミングって正解がないのでしょうが、こだわりたいところです。 少々長くなりますが、お付き合いいただける方は、よろしくお願いします。 要件をもう少し述べますと、 RSSドキュメントには、大きく分けて1.0と2.0という別のフォーマットがあり ます。さらにAtomというフォーマットもあります。どのフォーマットであって も読み込み、フォーマットに依存しないJavaオブジェクトを構築します。 逆変換は、出力を行うクラスをかえることによってそれぞれのフォーマットで 出力します。 切り口として、2つ挙がりました。 1. XML関係のライブラリを参考にする 2. デザインパターンに従う 1について 今回の「RSSドキュメントファイルからJavaオブジェクト構築するクラス」は、 javax.xml.parsers.DocumentBuilder に近いと思いました。 ■一般的なパース処理(DOM)
Documentオブジェクトを構築するからDocumentBuilderですから、 今回はRSSオブジェクトを構築するので、RSSBuilderで良いのかなと思いました。 疑問として、DocumentBuilderのインスタンスをDocumentBuilderFactoryからしか 生成させない理由がわかりません。 今回、XMLの解析には、XercesのSAXPerserを使っています。 ■一般的なパース処理(SAX)
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でしょうか。これらはクラス名として使うにはふさわしくない ような気がします。
そうですね。実際は、思いつく限り定義してあります。 ・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からもパースできたら完璧ぃ | ||||||||||||
|
投稿日時: 2006-05-25 16:11
単なる双方向コンバータかもしれませんよ。
片方向ならRSS2Obj、Obj2RSSとしたかも。 [ メッセージ編集済み 編集者: 未記入 編集日時 2006-05-25 16:12 ] |
1