在每个entilty的单独类中创建属性的用途是什么?

时间:2010-11-16 06:22:43

标签: c#-3.0

我正在学习一些优秀的代码练习,这就是为什么我要通过一些代码,有些东西我无法理解。它为每个实体创建了一个单独的类属性,就像在userClass中它具有属性

一样
  #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

并且从业务逻辑类中使用属​​性而不是直接使用任何实体的属性名称,但我很困惑,是否需要创建这样的属性?

除此之外,它已经获得了数据库列名的枚举,其背后有明确的理由,如果在不久的将来我们必须更改数据库表的字段名称,那么我们不必更改整个业务逻辑类我们可以直接对枚举进行更改,但是有什么用于创建这样的属性请详细说明我

3 个答案:

答案 0 :(得分:1)

可以在Interfaces上定义属性,但不能在成员字段中定义。因此,如果您需要将此类重构为实现接口的类,则可以将属性放在接口上(然后还有其他类来实现它们。)

答案 1 :(得分: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

答案 2 :(得分:1)

一些类似的问题:

Public Fields versus Automatic Properties

Property vs public field

除上述之外:实际上,您可以自己轻松决定公共领域或财产。理解这一点要容易得多:

(1)Name是类Person

的属性

(2)Speed是类Plane

的属性

(3)Empty是类String的公共字段。如果你说String有一个名为Empty的属性,那真的很奇怪。 String有一个属性Length很容易理解。