ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  396  : 記事  0  : コメント  1030  : トラックバック  66

ニュース

さて、今年の秋は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

何かインスタンスを作る役割を持つクラスを作る場合
Creator か Generator か Builder か Maker かよく迷いませんか?
メソッドにしてもそうです。

私的なイメージは
[Create]
属性的な情報を渡してもらって生成する場合。
たとえば、4人乗りで黒でハイブリッドといったオーダー・イメージにあわせて車を作る。
File.Create とか WebRequest.Create とか。

[Generate]
使い手の情報はイラン、こっちの都合で生成する場合。
たとえば、在庫消化のためにあまったパーツで車を作る。
GUID とか 乱数とか。(FCLだとどっちも Generate じゃないけどw)

[Build]
部品となる情報を渡してもらって完成品を生成する場合。
たとえば、指定されたエンジンやタイヤやシャーシを使って車を作る。
StringBuilder とか CommandBuilder とか。

[Make]
わからん・・・・候補には挙がるけどいつも使わない。

皆さんはどうですか?

また、少し違う状況ですが Hoge のインスタンスを返すメソッドを作る際、GetHoge か CreateHoge か迷いませんか?
単に Hoge を作る場合じゃなくて、○○な Hoge を返すような場合、ちょくちょく迷います・・・
投稿日時 : 2007年9月28日 0:12

コメント

# re: 作る人 2007/09/28 0:25 中博俊
いづれもつけちゃいけない名称じゃないかぁ(w

# re: 作る人 2007/09/28 1:58 やじゅ
メソッド名ランキング
http://blogs.wankuma.com/youryella/archive/2007/06/17/81020.aspx


# re: 作る人 2007/09/28 7:46 渋木宏明(ひどり)
デザインパターン的には Factory ですね。

# re: 作る人 2007/09/28 9:16 まどか
> インスタンスを返すメソッドを作る際、GetHoge か CreateHoge か迷いませんか?

コレクションではFind~というのもありますね。
Find~(key)は検索なので無かったらNothing、Get~(key)は無かったら例外、のような話もあったと思います。

# re: 作る人 2007/09/28 10:56 シャノン
GUIDはSDK ToolsはGuidGen.exeだけど、その中身はCoCreateGuidだったりするww

# re: 作る人 2007/09/28 11:46 かずき
私もFactory派です

# re: 作る人 2007/09/28 12:01 シャノン
Factory はクラス名で、メソッド名は Factory.Create になるんでしょうね。
Builder と Factory はまた違う感じ。
Factory は Create した時点で完成しているけど、Builder は箱だけ作って中身はこれから詰めるみたいな。

Getは…うーん。
そのメソッドの実装はわからないけれど、そのメソッドが属するクラスが内部に抱えているであろうと推測されるデータはプロパティで返してほしい。そういうところに Get 使われると違和感がある。
一方で、内部のデータをどうにか加工して返してくれる場合はGetでもいい。
新しいものを作るという意味合いが大きいときはCreate。

# re: 作る人 2007/09/28 14:11 渋木宏明(ひどり)
>Factory はクラス名で、メソッド名は Factory.Create になるんでしょうね。

そすね。それがたぶんいっちゃんジェネラルなパターンかと。

引数を取るタイプのファクトリメソッドの名前は、BCL 的には FromXXX() が好まれてるようですね。

>Factory は Create した時点で完成しているけど、Builder は箱だけ作って中身はこれから詰めるみたいな。

Factory はいかにも完成品が出てきそうだけど、Builder は汎完成品やら部品が出てきて、自分で組み立てろーみたいなイメージがあります>じぶん

>Getは…うーん。

Get は、新規インスタンスを返すやつと、手持ちのインスタンスを返すやつのどっちもありそう。

Find は、新規インスタンスではなく、手持ちのインスタンスが返ってくるイメージが強いなぁ。


# re: 作る人 2007/09/28 15:21 凪瀬
私もクラス名がFactoryでメソッドがcreateXX()ですねぇ。
Builderもクラス名で使うけどメソッド名では使わないな。

getXXはプロパティの取得に限定して使うのでこの手のメソッドでは使いません。

# re: 作る人 2007/09/29 2:03 THREE-ONE
Factoryパターンを実装する場合は Factory にしますが、Factory パターン以外で作る人を作ることはないのかなぁ?
ポリモフィズムを利用しない作る人クラスは作らず、そのものを表すクラスが作れってことか?
File とか Guid とか

> GUIDはSDK ToolsはGuidGen.exeだけど、その中身はCoCreateGuidだったりするww
そしてメソッドは Guid.NewGuid w

# re: 作る人 2007/09/29 9:16 渋木宏明(ひどり)
>ポリモフィズムを利用しない作る人クラスは作らず、そのものを表すクラスが作れってことか?

あんまり意識してなかったけど、そうしてるかも>じぶん

Post Feedback

タイトル
名前
Url:
コメント: