Oop 选择对象时的最佳实践

Oop 选择对象时的最佳实践,oop,inheritance,polymorphism,Oop,Inheritance,Polymorphism,因此,我正在创建一个程序,从数据库中收集大量不同的数据,并创建/更新几个图表供最终用户查看 现在,在某种程度上,所有数据都遵循相同的模式: 每个数据都附有一个日期。该日期用于在图表上显示X坐标 每个数据都有一个所谓的队列(只是一个名称)** 到目前为止,我所做的是创建一个超级类(抽象类)。我的想法是创建这个超类的各个子类,并允许它们拥有自己的实现和字段 现在我的问题是,其中一些对象相对较小,例如,我有一个对象,它只包含三个字段,分别是getter和setter。最好的做法是分离和征服,还是拥有尽

因此,我正在创建一个程序,从数据库中收集大量不同的数据,并创建/更新几个图表供最终用户查看

现在,在某种程度上,所有数据都遵循相同的模式: 每个数据都附有一个日期。该日期用于在图表上显示X坐标

每个数据都有一个所谓的队列(只是一个名称)**

到目前为止,我所做的是创建一个超级类(抽象类)。我的想法是创建这个超类的各个子类,并允许它们拥有自己的实现和字段

现在我的问题是,其中一些对象相对较小,例如,我有一个对象,它只包含三个字段,分别是getter和setter。最好的做法是分离和征服,还是拥有尽可能少的目标

拥有小对象的另一种选择是,一个较大的对象,简言之,正在谈论相同类型的对象,但其中一半有一个字段,而另一半没有。这就是为什么我想将其拆分为两个对象,以避免字段在50%的时间内为空

以下是我的对象的外观示例:

子类示例

    class Callback : ContactQueue
{


public int completedCallbacks{get; set;}
    public int completed_within_timeframe{get; set;}
    public int answerPercentage { get; set; }
    public override String type {get; set;}
    public override DateTime period { get; set; }
    public Callback(String type,DateTime period)
    {
        this.type = type;
        this.period = period;
    }
    public override String toString()
    {
        return type;
    }
    public double percentageCompleted {
        get
        {
            return completed_within_timeframe / completedCallbacks * 100; // todo
        }
    }

}

我希望您能理解我的问题,如果没有,请留下评论,我会尽快回复。

这取决于您的系统。如果你想为你的字段设置一个存储空间,那么你可以用一个对象和多个getter/setter


但我建议按行为将它们分开。您可能希望将方法添加到对象中,并且您希望的行为会有所不同。在这一点上,如果您使用了第一种方法,那么您必须在这些方法中进行大量检查以正确执行它。您需要分离对象以更容易缩放。

从我的角度来看,您最初的方法是最好的。当然,现在看起来有点过分了,但是如果对象有更多的属性,比如说,它更能证明未来。使用一个填充了不同属性或不依赖于它所代表的真实对象的大对象不是非常面向对象的。@Bartdude这正是我所想的,但我现在不确定它只是像1 datetime 1 int和1 Strings这样的字段。通过查看代码,您的方向是正确的。此外,您可能希望在抽象类中实现一些方法,如
toString
类型的getter/setter
。如果需要,您可以覆盖它们。不是每次创建子类时。