|
これって、DB の話じゃなくて、インスタンス生成一般の話ですよね?
■No63714 (悩み多きランナー さん) に返信 > 前者ではnew演算子が付いていますが後者ではnew演算子が付いていません。 > 同じインスタンス生成においてnew演算子がある場合とない場合の違いについて教えていただければと思います。
そのクラスの設計によります。 どちらの場合も、どこかで new されていますが、それを自分で明示的に使うか、隠蔽されているかの違いになります。 (CreateCommand の中で new されて、プロパティやフィールドをセットした上で返しているはず)
パターンとしては、自分で new するしか作りようがないもの、どちらの方法も用意しているもの、インスタンス生成を隠蔽しているもののそれぞれがありえます。 どちらを採用するかはそのクラスの性質やクラス設計者の思想によります。
作ったインスタンスのイベントにイベントハンドラを SqlConnection 側が持ちたいとか、生成したインスタンスを SqlConnection 側が管理して切断時にまとめて Dispose したいとか、そういったニーズがあるなら、私は隠蔽を考えます。 (new でもできるけど、SqlCommand 側が sqlConnection に登録する形になるので私は選ばないかなぁ)
ほかにも考え方として、いくつかの Command があって、CreateAddCommand, CreateDeleteCommand などで提供し、そのクラスの生成方法はできるだけ見せない方がユーザーの使い勝手がよいという場面もあるかもしれません。
|