MVC控制器依赖

时间:2015-12-19 12:19:51

标签: c# model-view-controller

我在纯C#中与MVC有关。

Player(M + V + C)

有3个脚本

1)PlayerModel

public int level;
public int money;

2)PlayerView

使用按钮AddLevel,触发广播消息

"PlayerView.LevelUP"

3)PlayerController

控制器接收消息PlayerView.LevelUp并执行以下操作:

PlayerModel.level++;
PlayerView.Update();

上面的例子很清楚,每个人都知道MVC是如何工作的,但是当它遇到更复杂的情况时,我就会遇到问题。在示例中,我们仍然使用我们的PlayerModel,PlayerView和PlayerController,但我们想添加Shop。

我们再次为Shop(M + V + C)

设置3个脚本

1)ShopModel

可用商店列表

2)ShopView

显示项目列表

如果针对特定项目单击按钮购买,则会发送消息:

"ShopView.BuyItem.{id}, price"

3)ShopController

问题出现在这里。我不知道如何从我的PlayerModel中减去钱。 我应该使用:

playerModel =- price;

或者我应该使用对PlayerController的引用并执行以下操作:

playerController.SubstractMoney(price);

当我们想要添加确认窗口时,问题可能会更复杂 - 您确定要购买该商品吗? 使用ConfirmationWindowView,ConfirmationController,ConfirmationModel?

2 个答案:

答案 0 :(得分:1)

根据SOLID原则,您的每个班级都应承担一项责任。车间控制器与玩家控制器不同,与模型相同。将您的项目分为演示(视图),业务(控制器)和数据(模型)层。您的控制器将包含所有业务逻辑,而数据层将提供数据。

答案 1 :(得分:0)

您的方法完全取决于您希望如何拨打电话的方案。您可以为组合的商店+播放器创建单独的视图模型。

关于你的第3点 - ShopController: 您可以直接进行ajax调用或调用action方法(playerController.SubstractMoney(price);)这取决于您的调用。

对于确认窗口:您可以使用jquery模式弹出窗口或任何第三个弹出窗口,例如:foundation.js。创建一个全局弹出窗口(具有全局ID),然后您可以从任何视图调用它。