我在MVC中创建一个由其他对象组成的模型。我的单个主模型对象包含成分对象。我的问题是,我应该向主要模型对象询问实际上将由成分对象执行的所有操作,还是应该询问成分对象并运行其操作?我可以在第一种方法中看到,主模型将必须考虑其成分模块的所有操作,并将导致添加许多函数,这些函数将简单地委托给组成对象。
让我用一个与我正在做的非常接近的例子来解释。下面的代码正在运行中,请忽略c ++语法错误(如果有的话)。
class Arm
{
public:
Move(int x, int y);
}
class Robot
{
public:
Arm leftArm;
Arm rightArm;
// should this function be there?
MoveLeftArm(int x, int y)
{
leftArm.Move(x,y);
}
// and likewise this?
MoveRightArm(int x, int y)
{
rightArm.Move(x,y);
}
}
// in the view when I want to move robot arms, should I do this
robot->MoveLeftArm(x,y);
//or this
robot.leftArm.Move(x,y);
转储问题但是它应该取决于成分对象实际支持的操作数量吗?也是因为我们是它,这也是立面设计模式的一个例子吗?
我的担忧:
请考虑成分对象不仅仅是上面的两个机器人手臂,它有更多的方法。
答案 0 :(得分:1)
我认为通常最好是封装数据和行为,并让每个类维护它,这样你就不会在它们之间建立牢固的关系。
所以最好的是View调用Robot.MoveLeftArm和RobotMoveRightArm,机器人是将消息发送到执行实际移动的Arms的那个。
这样,手臂移动的调用和实现被封装在Arm中,它可以在不影响视图的情况下改变
还有一些选项可以让接口定义行为,并让类实际实现该行为,从而在它们之间创建契约。