[英]Understanding JSF as a MVC framework
我正在阅读JSF,我觉得为什么JSF是一个MVC框架(或者至少哪个部分属于哪个“字母”)我感到很困惑。
我看了一下这个问题: JSF MVC框架中哪些组件是MVC?
我在那里阅读如果你不在聚合视图中查看模型是你的实体,视图是你的XHTML代码而控制器是托管bean。 嗯......好的,但视图通常不依赖于执行进一步的业务逻辑调用,这些调用返回一组实体,例如,描述是否仍然适合?
我读过的一本书将其描述为托管bean,是Faces Servlet(Controller)用于调用业务层(Model)的某种“消息”bringer,然后XHTML代码就是视图。
有太多的解释和差异,所以我不知道哪个或如何理解它。
在JSF和许多其他Web框架中,它通常不完全清楚的部分原因是MVC模式最初是为桌面应用程序设计的。
在桌面应用程序中,节点M,V和C是最大连接图,这意味着每个部分可以与每个其他部分通信。 例如,如果模型更改,它可以将此更改推送到视图。 如果桌面应用程序中存在多个视图表示,则尤其可见。 更改一个,并实时查看其他更新。
由于Web应用程序的客户端/服务器和请求/响应特性,经典MVC不会将1:1映射到大多数Web框架。
具体来说,在JSF中,映射如下:
UIComponent
和Facelets实现。 FacesServlet
)。 特别是最后一部分经常不太清楚:在JSF中你没有实现一个控制器。 因此,支持bean或任何其他类型的托管bean 不是控制器。
第一部分(模型)也并不总是清楚地理解。 业务逻辑可以由EJB和JPA实现,但是从JSF的角度来看,值绑定引用的所有内容都是模型。 这也是JSF生命周期阶段之一的名称来自: Update Model
。 在此阶段,JSF将UI组件中的数据推送到模型中。 从这个意义上讲,(JSF)托管bean就是模型。
虽然JSF本身没有明确定义这个概念,但是有一种经常重复使用的托管bean称为支持bean 。
对于JSF,支持bean仍然是模型,但实际上它是位于模型,视图和控制器中间的管道元素。 因为它执行一些可能被视为某些控制器任务的任务,所以这通常被误认为是控制器。 但是,如前所述,这是不正确的。 它还可以执行一些模型任务,偶尔也可以执行一些视图逻辑。
也可以看看:
它以极简主义的形式出现:
JSF使您能够控制您的请求/响应。 您创建模型/视图的方式并不直接连接到框架MVC概念。 这只是一个选择问题。 MVC概念与代码组织有关。
类似地,Struts是一个MVC框架,但它主要用作控制器。
我想我会帮助你更好地澄清你的想法。
关于托管bean思想的有趣之处在于它既可以用作模型(MVC模式),也可以用作控制器( 中介控制器MVC模式 ,也称为模型视图适配器),其中模型和视图不相互作用直。
在后一种情况下,路由机制不是控制器,因为业务逻辑包含在托管bean中,而Model完全是域模型。 然后我们有:
模型 - 包含域模型,在大多数情况下代表数据库中的表,通过DAO持久化。
View - 连接到bean的ui组件;
Controller - 包含业务逻辑并处理视图和模型之间通信的托管bean。
我认为有些人将中介控制器MVC混淆为普通的MVC,这会导致遇到不同的解释。
我想,这里所有的东西都是正确的。 但是混淆的主要原因是混合了来自框架的mvc组件定义,这里是JSF,以及您在应用程序设计中定义的模型和控制器组件:
假设您从业务应用程序中的JSF更改为任何其他Web UI框架:您仍将拥有“业务模型”和“业务控制器”。 (在我们的项目中,我们只称这些组件为“模型”和“过程”。) 这意味着什么:您不能将mvc用于整个应用程序体系结构的描述,而只能用于UI,或者您可能必须在完整的应用程序堆栈中接受许多控制器,类似组件的模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.