引用彼此代码设计的类

时间:2017-07-18 21:15:06

标签: c++

我有一个相当大的课程,我想分开关键部分,但我不知道我的代码设计是否首选

 class Something
{
public:
    void draw()
    {
        m_drawer.draw();
    }

private:
    SomethingDrawer m_drawer;
}

class SomethingDrawer
{
public:
    SomethingDrawer(Something* something) :
        m_something(something)
    {}

    void draw()
    {
        drawSomethingObject();
        drawSomeOtherObject();
    }

private:
    void drawSomethingObject();
    void drawSomeOtherObject();

    Something* m_something;
}

或者我应该将绘制所需的Something对象传递给drawSomethingObject/drawSomeOtherObject,而SomethingDrawer不需要对Something的引用。

1 个答案:

答案 0 :(得分:1)

虽然"首选"方法是一种意见问题,可能取决于你想要实现的细节,single responsibility principle表明最好不要将抽屉包装为实例属性而是通过你的#34 ;东西"对象"抽屉"如所须。如果是一个" Something"是保存关于某事物的数据,然后没有必要承担以某种形式呈现该数据的额外责任。

事实上,Model-View-Controller (MVC)设计模式正好利用了这种区别。如果" Something"保存您的数据(是模型),然后您决定要多种方式来绘制"绘制" (查看)该数据,然后避免绘图和数据保持类之间的耦合将为您提供更大的灵活性。

这里值得考虑的另一件事是,除非抽屉需要保持特定状态,否则#34; Something"数据(已经有点代码味道),你可以创建一个抽屉并传递它#34; Somethings"根据需要而不是为每个Something实例创建一个。