2010-11-16 43 views
0

我正在學習一些很好的代碼實踐,這就是爲什麼我要通過一些代碼,有些事情我不明白。它使財產在一個單獨的類爲每個實體像UserClass的具有財產什麼是創建屬性在每個entilty單獨的類中使用?

#region public properties 

    private int uid; 
    public int userId 
    { 
     get { return uid; } 
     set { uid = value; } 
    } 

    private string uName; 
    public string userName 
    { 
     get { return uName; } 
     set { uName = value; } 
    } 

    private string pwd; 
    public string password 
    { 
     get { return pwd; } 
    // set { pwd = value; } 
    } 


    private string uAddress; 
    public string userAddress 
    { 
     get { return uAddress; } 
     set { uAddress = value; } 
    } 


    private string fName; 
    public string firstName 
    { 
     get { return fName; } 
     set { fName = value; } 
    } 

    private string lName; 
    public string lastName 
    { 
     get { return lName; } 
     set { lName = value; } 
    } 

    private string uPhone; 
    public string userPhone 
    { 
     get { return uPhone; } 
     set { uPhone = value; } 
    } 

    private string uMobile; 
    public string userMobile 
    { 
     get { return uMobile; } 
     set { uMobile = value; } 
    } 

    private int secretQuestion; 
    public int securityQuestion 
    { 
     get { return secretQuestion; } 
     set { secretQuestion = value; } 
    } 

    private string userAnswer; 
    public string answer 
    { 
     get { return userAnswer; } 
     set { userAnswer = value; } 
    } 

    #endregion 

,並從業務邏輯類,它使用的不是直接使用任何實體的屬性名稱的屬性,但我搞不清什麼有需要做這樣的財產?

除此之外,它已經得到了數據庫列名稱的枚舉,這背後有一個明確的理由,即如果在不久的將來我們必須更改數據庫表的字段名稱,那麼我們不必改變整個業務邏輯類,我們可以直接對enum進行更改,但有什麼用途來創建像這樣的屬性請詳細說明這一點

+0

可能重複[自動實現的getters和setter與公共字段](http://stackoverflow.com/questions/111461/auto-implemented-getters-and-setters-vs-public-fields) – nawfal 2013-06-03 17:37:01

回答

1

您真的在問爲什麼它使用屬性有公共領域?

字段是一個實現細節 - 它們是如何存儲數據的,這不應該是外界關心的事情,至少對於99%的類型來說。屬性是類型在API中的合同的一部分 - 實現取決於類型。換句話說,這是一個封裝問題。屬性可以在接口中表達爲抽象方法等,這正是因爲它們使合同和實現保持分離。

此外,屬性使數據綁定,調試和各種其他事情更簡單。我有一個article about why properties matter,你可能會覺得有用。儘管如此,這些屬性是以一種單調乏味的方式實現的 - 而且它們不遵守.NET命名約定。我會寫他們爲:

public int UserId { get; set; } 
public string UserName { get; set; } 
public string Password { get; set; } 
// etc 
+0

你說過那些屬性是以乏味的方式實現的,怎麼樣? – NoviceToDotNet 2010-11-16 06:43:44

1

屬性可以在接口上定義,但成員字段不能。因此,如果您需要將此類重構爲實現接口的類,那麼可以將這些屬性放在接口上(然後讓其他類也可以實現它們)。

1

一些類似的問題:

Public Fields versus Automatic Properties

Property vs public field

除了以上:其實你可以很容易地自己決定公共領域或財產。這是很容易理解的是:

(1)Name是類Person

(2)Speed的一個屬性類的屬性Plane

(3)Empty是類的公共領域String。如果您說String有一個名爲Empty的屬性,那真的很奇怪。而String有一個屬性Length很容易理解。

+0

沒有得到你,請詳細介紹一下。 – NoviceToDotNet 2010-11-16 06:45:10

相關問題