2017-02-16 120 views
1

我確信這個問題已經被回答過了,但我真的不知道如何找到答案,而且我的搜索沒有取得任何結果;通過關閉主題並指向正確的問題/答案,可以自由地回答這個問題。實例化一個對象的列表

比方說,我有一個班級代表我的組織成員。該類有一個構造函數來實例化Member對象,並將參數作爲成員ID,並執行數據庫調用以返回表示該成員的行以及我感興趣的成員的任何屬性。

獲取成員列表的正確協議是什麼?

我的數據庫查詢很簡單 - 我有一個存儲過程,它將返回我有興趣獲取的成員列表。但是,我如何在應用程序級別上表示呢?

現在,我有一個Member對象的構造函數,它將DataRow作爲輸入,並指定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的輸入和輸出,然後將這些數據返回給調用者;和一個業務邏輯層,它將決定進行哪些服務調用以及如何組合返回的數據。

你如何極大地實現該結構取決於以下幾個因素:項目的

  • 大小(這是爲小型企業或每個人)
  • 大小團隊的(它只是你或者是有不少開發商參與)
  • 測試(有沒有什麼測試,以及有多大的覆蓋)
  • 時間表可用(它需要做的這個星期)的數據
  • 靈敏度(你處理財務數據)
  • 個人喜好(製表符或空格或代碼牛仔)

最佳實踐將取決於這些因素如何排隊決定不同的東西。如果僅僅是你,那麼它就更加開放。如果是一個團隊,那麼他們可能已經有了這種類型的指導。

我會建議至少使用數據訪問層和服務層。