Java 区分JSF中的模型和控制器

Java 区分JSF中的模型和控制器,java,model-view-controller,design-patterns,jsf,cdi,Java,Model View Controller,Design Patterns,Jsf,Cdi,我想清楚地了解开发JSF应用程序的正确方法。 在我们的项目中,模型和控制器是同一个类,由CDIBean表示。我有点困惑这是否是一个好的做法。就我所理解的MVC模式而言,控制器应该处理用户操作(比如提交表单),模型应该包含业务逻辑和数据。或者他们在同一个班上可以吗? 另外,每个页面是否应该有自己单独的控制器/模型(即,它是否被认为是一个好的实践)?通常最好有两个层-一个是JSF管理的bean(可能由CDI管理),另一个是不知道使用它们的web框架的bean 至于“控制器”——FacesServle

我想清楚地了解开发JSF应用程序的正确方法。 在我们的项目中,模型和控制器是同一个类,由CDIBean表示。我有点困惑这是否是一个好的做法。就我所理解的MVC模式而言,控制器应该处理用户操作(比如提交表单),模型应该包含业务逻辑和数据。或者他们在同一个班上可以吗?

另外,每个页面是否应该有自己单独的控制器/模型(即,它是否被认为是一个好的实践)?

通常最好有两个层-一个是JSF管理的bean(可能由CDI管理),另一个是不知道使用它们的web框架的bean


至于“控制器”——
FacesServlet
可以被视为整个应用程序的核心组件。

JSF控制器只是UI处理程序,不应该携带任何业务逻辑。通常还有更多的层(我这里只包括与逻辑相关的层):

  • UI控制器-与UI紧密相连,因此与MVC使用的技术紧密相连
  • 服务层-是业务逻辑的门面入口点,通常还管理事务,在某些情况下,还管理DTO/实体转换(如果需要)。它对您使用的Web MVC技术一无所知
  • 遵循域模型模式的业务逻辑(有时称为域服务)
    遇到困难时,将您的方法转换为MVC。所以,托管bean表示模型,但第二层是用于什么的呢?对于整个应用程序,只有一个
    前端控制器
    可以吗,还是应该为每个页面创建单独的控制器?谢谢如果您的bean不依赖于JSF或servlet API,那么只需要一层就可以了。但是如果它们与web内容交互,比如获取faces上下文或设置响应头,那么它就不是纯粹的业务逻辑,应该分开。我同意,如果使用完整的J2EE堆栈,您可以将会话保留在@SessionScoped JSF托管bean中,并将无状态EJB用作DAO或业务逻辑实现。哇,这是第一篇文章的一个很好的答案!我们肯定有您在这里描述的所有层,但在我看来,其中一些超出了MVC模式的范围。我不确定,但我猜模型有时充当委托,调用不符合模型-视图-控制器模式的服务。这肯定超出了范围。从不同的高度可能会有不同的模式。所以MVC只关心3个元素:视图(xhtml)、Conroller和模型(视图的数据源)。服务层是MVC没有涵盖的东西,它是一个单独的EE模式,在项目的不同部分工作。相关: