2017-02-16 8 views
1

私はこの質問に以前には答えられていると確信していますが、正直なところ答えを見つける方法がわからず、検索しても結果が出ません。トピックを閉じて、私に正しい質問/答えを指摘して、この質問に答えてください。オブジェクトのリストをインスタンシエート

私の組織のメンバーを表すクラスがあるとします。クラスにはMemberオブジェクトをインスタンス化するコンストラクタがあり、Member IDをパラメータとして使用し、メンバを表す行を返すためにデータベース呼び出しを実行し、使用したいメンバのプロパティを返します。

メンバーリストを取得するための正しいプロトコルは何ですか?

私のデータベースのクエリは簡単です - 私は取得に興味のあるメンバーのリストを返すストアドプロシージャを持っています。しかし、それをアプリケーションレベルでどのように表現するのですか?

今、私は、入力としてDataRowを受け取り、Memberオブジェクトのすべての関連プロパティを割り当てるMemberオブジェクトのコンストラクタを持っています。私は、次のことをやっている:

public static List<member> getList() 
{ 
    DataTable dt = GetMemberList(); 
    List<member> memberList = new List<member>() 
    foreach (DataRow dr in dt.Rows) memberList.Add(new member(dr)); 
    return memberList; 
} 
+1

これはすべて「正しい」という意味に依存します。 –

+1

GetMemberList()は何を返しますか?これはおそらくlinqを使ってコードのいくつかの行で行うことができます。 –

+0

GetMemberListは、DataTableオブジェクトを返します.DataTableの各行は、データベースのメンバーテーブルの行を表します。 –

答えて

0

現在、あなたが現在行っていることには何も問題はありません。

 DataTable dt = GetMemberList(); 
     List<Member> memberList = new List<Member>(); 
     foreach (DataRow dr in dt.Rows) 
     { 
      memberList.Add(new Member(dr)); 
     } 
0

私はあなたのメンバー(私はあなたのクラスの資本Mを使用することをお勧めします)クラスのように見えるが、あなたはあなたのクラスのコンストラクタとしてのDataRowを取ることができますかわからないんだけどパラメータを作成し、プロパティを次のように設定します(ここではプロパティ名とデータベース列名を仮定しています)。

public class Member 
{ 
    public Member(DataRow dataRow) 
    { 
     MemberID = Convert.ToInt32(dataRow["MemberID"]); 
     MemberName = Convert.ToString(dataRow["MemberName"]); 
    } 

    public int MemberID { get; set; } 
    public string MemberName { get; set; } 
} 

これは最善の解決策ではありませんが、これは提供したコードでうまくいくはずです。

+0

これはまさに私が現在行っていることですが、私は実際どのように/どこで私が各メンバーオブジェクトを作成するために繰り返すDataTableを実際に取得するべきかを知ることに興味があります –

+0

あなたのコメントを読んだ後、私はこれをどうやってやるのかの提案をすることができます。私はすべてのデータベース呼び出しをオブジェクトリストを返す静的なクラスに入れます(あなたの場合、メソッドは 'List 'を返します。)したがって、 'DataTable'を返す代わりにメソッドコールでそれを使用して' Member'オブジェクトを作成します返されるリストに入れてください。うまくいけば助けてください。 – DanHarrigan

1

GetMemberListここで仕事をしているのですが、getListは単なる抽象です。あなたが話していることは懸念の分離です。通常、これは、データベースを持つプロジェクトでは、複数のレイヤーに分割され、多くの場合、n層構造と呼ばれます。

この構造には、データベースのやり取りを処理するデータアクセスレイヤ(DAL)が含まれています。 DALの入出力を操作し、そのデータを呼び出し元に返すことができるサービス層。ビジネスロジックレイヤーを使用して、どのサービスコールを行うか、返されるデータをどのように構成するかを決定します。あなたがその構造を実装する方法

が大幅にいくつかの要因に依存します:プロジェクトの

  • サイズ(これは小規模ビジネスのためか、皆のためである)
  • あなたのチームのサイズは、(それはあなたまたはあるあります関与が多くの開発者)が利用可能
  • テスト(すべてのテストがあり、その適用範囲がどのように大きい)
  • タイムライン(それは今週行われる必要がない)データの
  • 感度は(あなたがいます財務データ)
  • 個人の好み(タブまたはスペースまたはコードカウボーイ)

ベストプラクティスを扱うことは、これらの要因が並ん方法に応じて異なるものを指示します。それがあなただけならば、それは解釈にもっとオープンです。それがチームならば、おそらく既にこのタイプのもののためのガイドラインがあります。

少なくとも、データアクセス層とサービス層を使用することをお勧めします。

関連する問題