2012-02-26 17 views
0

オブジェクトとクラスを操作するときにデータベースからデータを格納および取得する際に、最良のコード設計が何であるかを知りたいと思います。クラス内のデータベースからデータを格納/取得するときのベストプラクティス

これは2通りの方法で実行できます。

私はデータベースにクエリを行い、クラス内のインスタンス変数にすべての情報を格納し、getters/setterで取得します。このようにして、私はいつも必要な情報を得ることができますが、多くの場合、すべての情報を常に必要とすることはありません。

public class Group { 
    public int GroupID { get; private set; } 
    public string Name { get; private set; } 
    public Group(int groupID) 
    { 
     this.GroupID = groupID; 
     this.Name = // retrieve data from database 
    } 
    public string getName() 
    { 
     // this is just an example method, I know I can retrieve the name from the getter :) 
     return Name; 
    } 
} 

他の方法は、いくつかのメソッドを作成し、パラメータとしてグループIDを渡し、その後、私が必要とする特定の情報をデータベースに照会することです。これはより多くの質問につながるかもしれませんが、私は必要な情報だけを取得します。

public class Group {  
    public Group() 
    { 
    } 
    public string getName(int groupID) 
    { 
     // query database for the name based on groupID 
     return name; 
    } 
} 

あなたはどのような方法を検討するのですか?ここで一緒に行くのがベストプラクティスですか、それとも私が思うものが最高ですか?

答えて

1

あなたはコンストラクタで大量のDB作業をしたくないです。重い作業は方法で行う必要があります。

また、DB作業とデータを保持するエンティティクラスを必ずしも結合したくない場合もあります。メソッドでデータベースからそれらのオブジェクトのうちの2つを返す場合はどうなりますか?例えばGetGroups()のように、DB作業をせずに構築することさえできません。複数を返すものについては、ストレージと検索はエンティティクラスから切り離されています。

代わりに、エンティティオブジェクトからDB作業を切り離します。 1つの選択肢は、GetFooやGetFoosなどのメソッドを持つdataaccesslayerを持つことができるということです。データベースにクエリを行い、オブジェクトにデータを設定して返します。

あなたはORMを使用する場合は、以下を参照してください。

https://stackoverflow.com/questions/3505/what-are-your-favorite-net-object-relational-mappers-orm

+0

私はこの権利があるかどうかを見てみましょう。私はむしろ、メソッドのデータベースを照会する必要があります、グループの新しいインスタンスを作成するGetGroup()と言うことができます。 Groupコンストラクタは、すべてのデータをパラメータとして取り込み、インスタンス変数に格納します。これで、GetGroup()は、そのグループオブジェクトにすべての自分のデータが格納された状態でそれを返すことができます。私はそれを得たか? :) – aelveborn

+0

そうだと思います。 GetGroups()メソッドがあるとします(もっと興味深い)。それはデータベースを照会し、2行を取得します。次に、2つのGroupオブジェクトを作成し、カラムからデータを設定し、グループオブジェクトの配列を返します。 – bryanmac

+0

Hmmですが、ORMを使用するとLINQ to SQLのようになります。オブジェクトにカスタムクラスを使用してスキップし、LINQを使用してオブジェクトを作成することはできますか?以前はORMを見ていませんでしたが、チュートリアルをたくさん見ています;) – aelveborn

0

それが最良の方法は、ORM(オブジェクトリレーショナルマッピング)でそれを行うことであろう、リレーショナル・データベースである場合。 ORM-マッパーの一覧はこちらをご覧ください:これは本当に最高の使用によって決定され、つまるところ何早期荷重に対するロード

https://en.wikipedia.org/wiki/List_of_object-relational_mapping_software

1

レイジー、。

ほとんどの場合、これは関連するエンティティを意味します。例えば、個々の住所を扱っている場合、州の読書と都市の読書を分割することは狂気になります。会社の社員のアドレス情報を読んでリストを返すときは、おそらく時間と記憶が浪費されます。

また、これらは相互に排他的なオプションではありません。データベースを呼び出すコンストラクタと、提供されたデータを使用するコンストラクタを持つことができます。

関連する問題