我正在学习 OO 和 MVC 范式(使用 Codeigniter 和 PHP)。我不断发现这样的警告:如果您发现自己将相同的代码粘贴到多个文件中,那么您没有正确使用 OO/MVC。所以,这里有一个问题要问更有经验的程序员。
我有一个创建用户表单,我使用了两个非常相似的版本:
版本 1(位于
/volunteer/register
)由匿名用户创建。该表单位于volunteers
Controller 中,需要由管理员验证。版本 2(位于
/admin/create_volunteer
)由登录的管理员创建。表单和验证几乎相同,但使用不同的参数提交。
另一个类似的例子:
我想构建共享一个模板的不同用户仪表板,但将由不同的用户角色使用,并根据角色具有不同的功能和信息。在我看来,我的选择是:
- 创建一个仪表板 Controller ,其中包含三个定义加载到仪表板模板中的数据的函数。
- 将仪表板功能添加到每个角色的 Controller (志愿者、管理员等)。
- 为每个案例(志愿者、管理员等)创建一个 Controller
如果这看起来很幼稚,我深表歉意,但本质上我是在寻找经验法则来确定如何在 MVC 中设计架构。
我的问题:
- 在第一个示例中,我对 Controller (
Volunteer
和Admin
)的合理选择是否不太理想?在这种情况下,代码复制是一种可接受的做法吗? - 有人可以推荐架构工具来为 MVC 建立逻辑一致性和良好的工作流程吗?
最佳答案
特别是因为这两种形式不同(不同的规则,不同的界面),如果您需要的话,拥有两个单独的 View 文件绝对没有错。在两个不同 Controller 或方法中加载相同的 View 文件是完全可以接受的,确实是适当的。如果只需要进行一些调整,请尝试通过向 View 文件传递不同的数据来重用 View 文件。
如果您只想在不同的实例中加载表单 View 文件,那会为您节省一些代码重复。只需设置不同的规则,如果需要,将不同的数据传递给 View 。这类似于使用相同的表单以两种不同的方法创建和编辑某些内容。如果输出将完全不同,只需编写单独的 View 文件。如果它是相同的输出但具有不同的数据 - 一定要重用它。
不要沉迷于尝试不重复 View 片段代码 - 如果您正在编写更多代码以通过针对不同实例修改 View 文件来强制重用 View 文件,这有点违背了目的。尝试将其作为一种通用做法,使您的代码尽可能可重用。
因此,在没有看到您的实际代码的情况下,我会说不用担心。根据我的经验,前端和后端的 View 文件几乎总是唯一的(完全不同的 UI)。一般来说,如果您发现自己在大量重复相同的非常相似的代码,那么是时候为它编写一个函数、类或模板了。
关于php - 在 Codeigniter 中重用表单和 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6272404/