2010-11-22 60 views
0

这背后有没有真正的问题的问题,只是我脑子有病的产品和驱动,使事情稍显怪异:)PHP:代码设计难题

所以,我有这个PHP应用程序建立在我的上方自己的MVC导向框架(是的,我做了我自己的而不是使用现有的)。它由本书完成,因此我们有模型(数据和数据库操作),视图(充满数据和渲染输出的模板)和控制器(处理请求,从模型中获取适当的数据,将数据放入视图中)。使用.htaccess规则完成请求路由的经典和无聊场景。

昨天我在代码,错误修正,情侣改进等方面做了一些改变。我强烈要求重新排列控制器的代码。他们觉得有点沉重和臃肿,方法的数量很难浏览文件,等等。我相信每个人都知道我在说什么。

我在考虑把我的控制器类分成许多类,每个类只处理一种类型的请求,如登录或注册或showProfile或killMe。

现在控制器类具有公共方法对应于部分用户友好的(或可能是SEO友好的)URL和路由类调用适当的控制器,它是根据url内容的方法。

更改我正在考虑将一个小的路由机制转移到调用特定的控制器,它的Execute()方法。

例如,对于URL = “www.example.com/users/login” 现在看起来是:

$controller = new url[0](); 
$method = url[1]; 
echo $controller->$method(); 

现在URL将变为 “www.example.com/login”和路由代码看起来像:

$controller = new url[0](); 
controller->Execute(); 

我省略了,我解析URL,并提取它们的路由信息​​,因为它是不相关的我的问题部分。

我在这个变化中看到了什么好处?

  • 一个每一个请求专用类
  • 较小的文件
  • 较小的代码
  • 易于维护
  • 破添加新的功能(新类型的请求)或修正错误时工作控制器的有限危险

缺点?

  • 可能很多类
  • 可能的性能命中
  • ???

而我的问题是关于你对这个想法的看法,它是否有任何意义。当然,我更感兴趣的是为什么我不应该这样做,而不是为什么我应该这样做。所以,如果你能想到的任何原因这将是可怕的想法和憎恶请立即说这将是为时已晚:)

EDITED 澄清一个问题之前:

我问我是否应该将我的单一的大型控制器处理许多类型的请求,通过它的方法分解成许多小型控制器,每个控制器只处理单一类型的请求。

现在我有控制器处理像“登录”,“showLoginForm”,“注册”,“激活”等请求的用户。重构的代码将由每个请求的单独控制器组成。

+0

你问你的[FrontController](http://martinfowler.com/eaaCatalog/frontController.html)是否应该调用[Transaction Scripts](http://martinfowler.com/eaaCatalog/transactionScript.html)或方法一个[PageController](http://martinfowler.com/eaaCatalog/pageController.html)或其他东西?我不太清楚你到底在找什么。 – Gordon 2010-11-22 07:48:07

+0

我添加了一些解释我在问什么:) – grapkulec 2010-11-22 09:20:40

回答

0

对于新旧方法我都能想到的一个缺点是你直接将URL映射到类名。如果您想更改网址,则必须更改班级名称。如果您希望针对不同语言使用不同的网址,则必须添加一个图层,以便将网址映射到类名称。 这就是为什么我宁愿有一个路由类,它会将URL映射到类名,这会为您提供一个接缝来改变事物。

+0

好点。我可能应该考虑将url与处理它们的实际代码分离,目前的映射不是很灵活 – grapkulec 2010-11-22 09:20:10

+0

我接受这个答案,因为这正是我在代码中所做的,它解决了我当时的所有疑惑和问题写这个问题:) – grapkulec 2010-12-07 12:12:41