【发布时间】:2014-12-02 03:58:10
【问题描述】:
我目前正在使用 Symfony2,并且我正在尝试将我的代码分成不同的控制器(如 Ajax 控制器、用户控制器等),但我真的不知道什么时候应该使用 create a新的。
例如,我的 DefaultController 开始变得相当大(约 800 行),我想知道控制器太长是否会影响网站的性能? (更长的加载时间...) 而且,如果是这样,我应该什么时候将控制器拆分成更小的控制器?
【问题讨论】:
我目前正在使用 Symfony2,并且我正在尝试将我的代码分成不同的控制器(如 Ajax 控制器、用户控制器等),但我真的不知道什么时候应该使用 create a新的。
例如,我的 DefaultController 开始变得相当大(约 800 行),我想知道控制器太长是否会影响网站的性能? (更长的加载时间...) 而且,如果是这样,我应该什么时候将控制器拆分成更小的控制器?
【问题讨论】:
我会说您应该对操作相同的数据(实体)或在明确定义的职责范围内操作的操作进行分组。例如。 UserController 用于用户,PostController 用于博客文章等。这意味着如果您要创建一个角色与其余操作不同的操作,请将其放在单独的控制器中。
Symfony 缓存了几乎所有内容,因此我认为大型控制器不会对性能造成影响,但如果您有数千行长的控制器,我不确定它是否只做一件事。
对于错误放置的查询和业务逻辑,控制器的大小也可能是一个警告信号。您应该将 QueryBuilder 调用分离到 Repository 类和其他逻辑到服务和事件处理程序。您可以通过使用注释而不是 PHP 代码来节省更多行。
【讨论】:
我认为最好从每个相关模型的控制器开始,并使用 CRUD 结构。
当然,这取决于您的需求,但如果您有一个“Post”模型,您可能需要一个带有 CRUD 路由和方法的 PostController,例如:索引 (/posts)、新建、更新、创建、删除.. . 根据您的需要,您可以删除或添加一些相对于 从此基础结构发布。
尝试在您的 defaultController 中检测与特定模型真正相关的内容并为它创建一个控制器。
祝你好运。
【讨论】:
@riska 和@Yoann 所说的都是正确的。
此外,如果我确定它只包含一种方法,我更喜欢 not 创建单独的控制器。那样的话,我就直接放到DefaultController。
【讨论】:
根据我的经验,控制器是 UI 层的一部分。如果您非常关心保持控制器的小型化,那么让我给您一个最佳方案,您可以让控制器必须做的事情:
1.Call the appropriate service
2.Return the response
对于每个控制器操作,这是 2 行代码,或者您甚至可以在一行中完成。
就像上面所说的那样,控制器通常根据它们所操作的实体/服务类型来区分。例如,如果您有一个实体 - 假设是用户,则最有可能在其中执行以下操作:createAction、editAction、removeAction、registerAction、activateAction、loginAction、logoutAction 等等...
无论您的控制器是瘦还是胖,它都不会对性能产生任何影响。代码将以类似的流程执行,所有类都缓存在生产环境中。
【讨论】: