我是否应该始终创建同时具有属性和方法的类?

Should I always create classes that have both attributes and methods?

提问人:Thomas 提问时间:6/20/2020 最后编辑:Thomas 更新时间:6/21/2020 访问量:264

问:

这被认为是一种不好的做法吗?如果这并不总是一个不好的做法,那么什么时候创建没有属性或方法的类是合适的?

OOP 语言不可知软件 设计

评论

0赞 Thomas 6/20/2020
@jaco0646 你是对的,描述令人困惑。我已经改进了它。

答:

0赞 Rajan 6/20/2020 #1

类不必包含方法和属性。假设一个 secenerio,其中某些属性是公开定义的,以便同时使用,因此我们可以在类之外的任何位置使用此变量。但是要使用封装,建议属性是私有的。

0赞 Bemn 6/20/2020 #2

如果你的意思是总是,我的回答是否定的,你不应该总是这样做。

如果语言允许你这样做,那一定是有原因的。请考虑以下工厂类:

public class Factory : IFactory
{
    public const string FactoryName = "StackOverflowFactory";

    public IPerson GetPerson(PersonType type)
    {
        switch (type)
        {
            case PersonType.Rural:
                return new Villager();
            case PersonType.Urban:
                return new CityPerson();
            default:
                throw new NotSupportedException(string.Format("{0} does not handle {1}", FactoryName, type));
        }
    }
}

在本例中,类包含一个属性和一个方法。这很正常。

另一方面,当我们谈论被动数据结构之类的东西时,为实现这种目的而创建的对象和类,那么你不应该将属性与方法混合在一起,因为这些对象的目的是存储数据,而不是操作数据。

坏总是相对的,基于系统的设计方式、类的目的等。如果系统是使用模式 A 设计的,但在更改代码时违反了该模式,那么这可能是一种不好的做法。如果该类仅用于存储数据,但您添加了一些方法来操作它,那么这也可能是一种不好的做法。

评论

0赞 Thomas 6/20/2020
你能举一个被动数据结构的具体例子吗?
0赞 Thomas 6/20/2020
还有一个有方法但没有属性的类的例子?
0赞 Bemn 6/20/2020
@Thomas,通常 .NET MVC 中的绑定模型是一个普通对象,没有任何方法。
0赞 Bemn 6/20/2020
@Thomas想象一下,你想要一个类,其中包含一个返回列表中最大数字的方法(是的,就像 Math.max 一样)。在这种情况下,您的类将只有一个(静态)方法,而没有属性。