C ++基础架构设计

时间:2018-04-05 07:09:52

标签: c++ architecture

我不确定正确的决定所以我问社区:

所以问题是:通过类型或通过属性建模属性是否更好?还是有第三种方式?

假设我们有两个球 - 红色和蓝色,我必须对它们做点什么。 所以第一个想法是:

export class Component {

    @ViewChild('myForm') myForm;

    this.myForm.valueChanges.subscribe(
        result => console.log(this.myForm.status)
    );
}

我想你明白了。但我想摆脱if(..)所以我可以把它改成

    struct Ball
    {
        RGB color;
    };

    void food( Ball& ball)
    {
        if ball.color == RED ....
        if ball.color == BLUE ....
    }

我不确定通过创建新类型(通过继承或使用装饰器)来描述程序流和行为是否正确,因为这可能很快导致巨大的类层次结构。

如果我考虑将这些类型与访问者模式一起使用,尤其是对于装饰类型,则会变得更糟。 我在这里错过了什么?

1 个答案:

答案 0 :(得分:2)

拥有foo的多个版本,使用不同颜色的Ball似乎完全错误。我认为如果你想这样做,你可能想要Ball内的一个成员函数,它可以对不同颜色的球做foo不同的做法。

您可以选择将其实现为虚函数,并使用派生类来表示每种颜色,或者具有一组if语句,这些语句现在是Ball类的内部,因此对其他人来说是“隐藏的”。

面向对象的想法是让对象“做东西”,而不仅仅是属性的持有者(在这种情况下是颜色),所以解决这个问题的“最正确”方法是让类本身知道什么是对象。那种应该做的。