2010-10-08 60 views
5

我的问题是我们尝试使用MVC(PHP)框架。讨论了很多后,认为MVC非常好,但我错过了编写可重用模型(应用程序)逻辑的可能性。所以,我不确定我们是否有正确的方法在MVC框架中实现我们的软件。如何在MVC模型中编写可重用的业务逻辑?

首先我要介绍一下我们目前使用的非MVC,oo方法。

例如 - 我们正在研究一些浏览器游戏(是的,这是我们的专业)。想象一下我们有一个玩家对象。我们经常使用这个播放器对象。我们有一些可供您购买的不同页面,因此您需要在玩家“银行账户”上进行“金钱”交易,或者想象您可以对其他玩家进行交易。我们有几个战斗脚本,这些脚本需要2个或更多的玩家对象(这取决于战斗类型,即战队战斗,玩家vs.玩家战斗......)。

所以,我们有几个页面(和控制器)与不同的战斗逻辑。但是每个控制器都使用玩家对象来计算玩家拥有的所有属性和物品以及玩家将会执行哪些伤害和防御。

那么,在MVC模型的情况下,我们如何重用播放器对象中的逻辑?在不同的战斗控制器和模型中复制所有必要的逻辑将是不好的。

我认为“黄金交易” - 逻辑将是一个很好的例子,给你一些更多的细节信息。在战斗中需要交易功能,如果你赢了其他玩家并且掠夺了他的一些黄金,那么在购买某些东西时你需要交易功能,并且在花费一些黄金时需要交易功能玩家公会...

所以,我会说这将是一个坏方法来定义所有这些功能在一个球员模型!我可以说你们这些玩家模型会很大(其实我们的玩家级别真的很大 - 它是一个神级)

你认为这个问题有MVC风格的解决方案吗?

回答

1

我会说你把代码放在最有意义的地方,以及你不需要在其他地方复制它的地方。

如果有一些操作始终需要一个Player对象,但可能在不同的控制器中使用,则Player类将是放置该对象的合理位置。另一方面,如果一点逻辑只需要在某个Controller的上下文中完成,并且可能包含其他类,那么它可能应该放在控制器中,或者也可能放在其他类中。

如果您在计算逻辑应该到哪里时遇到困难,这可能是因为您的函数没有粒度和足够的可重用性。毫无疑问,MVC的一些方面会迫使你更多地考虑关注点的分离和保持事情的干扰,而不是一种“普通的”面向对象的方法......所以你最终可能会分解当前编码的操作现在可以在不同的类中使用多个函数来在正确的位置获得正确的代码。例如 - 这些并不是特定的建议,而只是一个随机可能的思考过程 - 可能需要将玩家之间转移“黄金”的过程分解为更细化的过程。玩家阶层可以完成改变余额的基本任务,但是控制人员可以执行该过程的特定部分,例如验证黄金被转让给谁以及谁转让以及为什么。