gpt4 book ai didi

model-view-controller - Coldfusion,前端 Controller 设计比页面 Controller 有什么优势?

转载 作者:行者123 更新时间:2023-12-04 12:13:50 24 4
gpt4 key购买 nike

我来自非计算背景,我正在努力了解 MVC 设计方法和框架。我“得到”代码重用,逻辑与显示分离,我“得到”封装和解耦,但我不明白这一点。

目前我只是将所有内容放在根目录中,图像、cfcs 和 _includes 的单独子文件夹,所有数据库交互都通过 cfcs。我在页面顶部进行所有处理,然后是注释行,然后在其下方显示/页面布局。

我看过的大多数框架似乎都偏爱前端 Controller ,因此我的顶级 Controller MVC 设计的简化版本将是 cfcs、 Controller 和 View 的子文件夹以及 index.cfm 中的大 switch 语句

<cfif not IsDefined("URL.event")>
<cflocation url="index.cfm?event=home" addtoken="No">
</cfif>

<cfswitch expression="#url.event#">
<cfcase value="home">
<cfinclude template="controllers/home.cfm"/>
<cfinclude template="views/home.cfm"/>
</cfcase>
<cfcase value="about">
<cfinclude template="controllers/about.cfm"/>
<cfinclude template="views/about.cfm"/>
</cfcase>
</cfswitch>

.. 但是,与页面 Controller 设计相比,这给了我什么真正的优势?除非它只是我写的那种网站,否则我似乎总是发现 Controller 逻辑特定于一个 View ,它不像一个 Controller 可以容纳多个 View 或多个 Controller 可以输出到一个 View ,那么有什么意义把他们分开?

我的灯还没亮,有什么建议吗?

最佳答案

通过“顶级” Controller ,我认为您的意思是 "front" controller ,请求进入应用程序的单一入口点。正如@bpannulla 所写,大多数 ColdFusion 框架都使用这种设计模式。这变得特别有趣 URL rewriting , 在这里很容易拥有 search engine safe URLs通过拦截 URL(例如 domain.ext/i/am/friendly.ext )并将其路由到某些标准文件,例如 index.cfm同时使请求的 URL 成为参数(通常作为请求 header )。这也使得 URL 更改的站点重新设计更容易,因为它很适合别名或重定向。

就 Controller 而言,它们通常与特定的 URL 或 URL 模式紧密耦合。与 Controller 的耦合可能更松散,但在实践中,我发现这是经过多次重构后的紧急属性。 Controller 的底层应该是对 service layer 的一个或多个调用。与数据库对话、执行业务流程、创建有状态实体等...然后 Controller 接收服务层的输出并将它们放入任何用于将数据传递给 View 的机制(例如 event 对象) )。

服务层意味着可重用,而不是 Controller 。 Controller 只是应用程序在其中工作的任何框架的扩展。这个想法是您应该能够在对 View 和服务层影响很小的情况下切换框架。需要触及的部分是 Controller 。

因此,服务层中的给定服务对象应该能够为多个 Controller 提供服务。例如,考虑将登录用户的信息显示为站点上的小部件。不同的 Controller 可能提供不同的页面,但每个 Controller 都会调用相同的服务对象来登录用户数据,这些数据可能会提供给呈现小部件的相同 View 。

更新:前置 Controller 优势

  • 安全 :集中认证和授权。
  • i18n & l10n : 在全局请求中注入(inject)正确的语言包
  • 流程编排 :考虑一下您不希望后退和前进按钮工作的购物车的多步骤结帐流程 - 通过将所有内容路由到前端 Controller ,您可以强制执行哪个步骤(即状态)
  • 记录和跟踪 :只需在一处添加即可轻松将 Google Analytics 或其他请求跟踪添加到站点
  • 错误处理 : 集中行为

  • 现在许多这些项目也可以使用 <cferror> 来完成。和 Appplication.cfc ,但我发现有一个集中点更容易。

    有用的链接
  • http://java.sun.com/blueprints/corej2eepatterns/Patterns/FrontController.html
  • http://msdn.microsoft.com/en-us/library/ff648617.aspx
  • 关于model-view-controller - Coldfusion,前端 Controller 设计比页面 Controller 有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4927270/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com