2014-02-06 29 views
0

我想在C#中定义一个类。我发现这两种方法:在c#中用不同的方法定义类

方法1:

public class customer 
{ 
    private string _name ; 
    private string _family; 

    public string Name 
    { 
     get { return __name; } 
     set { if(value=="")message(" نام کارخانه را وارد کنید "); 
      _name= value; } 
    } 

    public string Family 
    { 
     get { return _family; } 
     set { if(value=="")message(" نام کارخانه را وارد کنید "); 
      _family= value; } 
    } 

    public void AddCustomer() 
    { 
     add _name and _family to database 
    } 
} 

方法2:

public class customer 
{ 
    public void AddCustomer(string name ,string family) 
    { 
     //code to add a customer 
    } 
} 

我感到困惑;哪一个应该使用,以及这两种方法有什么区别?哪一个更好,更常用?

+0

这更多的是偏好和背景。 – tuespetre

+2

除了在方法1中,_name和_family是私有的。他们将如何设置? – Scottie

+1

即使他们是公开的,对于那些使用你的班级的人来说,他们最好先设置姓名和家庭并不明显,否则“添加姓名和家庭”代码将失败。 –

回答

10

我不会这样做。您正在customer类上引入名为AddCustomer的方法。我不希望Customer知道一个数据库 - 我希望某种数据访问层或客户存储库了解它。

A Customer可能有一个构造函数采取一个名称和家庭,或其他什么,然后你的CustomerRepository将有一个Add(Customer)方法。

想起来了另一种方式:我希望它让使用Customer类(应该有一个资本C与.NET命名约定相一致)没有数据库的任何知识非常有意义,因此可能不应该知道数据库。

不可否认我做的自定义XML序列化方面的突破,这些自己的规则自己,让静态FromXElement方法和ToXElement实例方法......但至少,不涉及外部依赖性。

+2

我本人无法说得更好,+1。 – Brian

2

首先,_name和_family在方法1中是私有的。没有办法设置它们。您需要将它们定义为公共。

其次,这是一个非常有问题的问题。有时,封装成员是有意义的,有时候你想在方法调用本身内联它们。没有“更好的办法”。

+0

那么,当我们应该内联传递它,并且它应该封装? – SSC

+0

我无法将多年的编程经验压缩到StackOverflow上的答案。试错是你现在最好的朋友。 – Scottie

相关问题