PHP MVC 框架设计

3

我最近遇到了一个问题,我自己解决不了:

我开始编写一个“小型”框架(浏览器游戏框架),它在某种程度上遵循MVC模式。

现在我有我的索引,引导程序,数据库适配器,调度程序和包装器,但我不知道如何“链接”它们。 我编写了它们的方法等,但我不知道如何设计它们以工作像引擎一样。

下一个问题是我的控制器,我不知道如何“链接”它们,以便它们可以轻松访问整个框架...... 是的,这很令人困惑,这就是为什么我需要你的帮助,一些通用的“框架程序流程”的方案会非常好。

谢谢。


是的,我有同样的问题,我对框架的类和它们的权限感到困惑。例如,路由器类会解析URL并确定控制器名称和操作名称,那么框架的哪个部分应该从路由器类获取这些信息并将此信息传递给框架的控制器类?也许框架应该有两个部分,第一部分是独立的类,例如(路由器,数据库,视图,控制器),第二部分的应用程序应该运行这些类的函数并在它们之间传递信息? - Oguz Bilgic
1
Oguz:框架的任何部分都不应该从路由器获取该信息。编程的另一个关键原则(与DRY有关)是“告诉,而不是问”。 - just somebody
这个php mvc教程也可能会有所帮助。 - adiian
1个回答

7
你把先决条件和后置条件搞反了。框架不是写出来的,而是逐步发展起来的。可以参考 Gang of Four 中的 Ralph Johnson 的文章 Evolving Frameworks编辑

我不明白作者所说的“应用程序”是什么意思,这是指原始代码项目还是具有基本功能的项目,后者将成为后续框架的基础。

根据您在编程和问题域方面的专业知识,两者都可以。重要的是目标(一个有用的框架),而过程只应尽可能地支持您实现它。您可以开始缓慢地开发三个在同一问题域中没有任何代码共享的应用程序,只需查看代码库并查看它们之间的共同点,并可能重构这三个完成的应用程序以使代码收敛,并提取公共部分。这不会在第二个和第三个应用程序的开发过程中给您带来任何推动力,但也不会妨碍它们与先前应用程序的并行重构。
假设您想要一个框架来简化编写基于浏览器的回合制策略游戏。
您的第一步是编写这样一个游戏,而不考虑在此单个游戏之外重用代码,但要注意在其中重用代码:内部重构无情,应用所有的编程原则:OCPSRPDRY 等等。特别是 DRY。代码重用(不要重复自己)是编程的基本原则,也是通向框架的第一步。最终您将得到一个在整个游戏中使用的类库和/或函数。
您的第二步是编写另一个基于浏览器的回合制策略游戏,遵循上述原则,使用第一个游戏的代码。您会发现其中很多内容都是针对第一个游戏的。使用适合第二个游戏且不需要修改的部分,并重构那些有用但不完全适合的部分,使它们在两个游戏中都有用并且能够适合。
重复以上过程以进行第三个游戏。
三是使您有希望获得真正可重用于问题域的代码的最小数字(考虑三角测量),而不是保证它会发生。另一方面,在没有真实应用程序的支持下推导出有用的框架是一种确保最终得到一堆无用垃圾的方法。
Johnson:

开发可重用的框架并不是简单坐下来思考问题领域就行了。没有人有洞察力能想出适当的抽象。

仔细阅读“三个例子”章节。


希望这会对我有所帮助;即使它仍然没有告诉我如何链接框架的实际部分。我不明白作者所说的“应用程序”是什么意思,这是指原始编码项目还是指具有基本功能的项目,将被带入后续的框架中。 - Julius F
1
@daemonfire300:我已经扩展了答案,希望能够消除你的疑虑。 - just somebody
@j.s. 再次非常感谢你。这真的会对我有所帮助,因为我已经拥有了一些基于回合制游戏的现实世界模型,我将使用它们将一些通用逻辑转移到我的代码中。 - Julius F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接