Php 模型为图层时如何存储模型状态

Php 模型为图层时如何存储模型状态,php,model-view-controller,model,state,Php,Model View Controller,Model,State,当模型是一个层并通过服务访问时,如何在MVC中存储模型的状态。您是否将服务级别定为a级状态?当视图可以或不可以使用该特定服务时,该状态将如何传达给视图 我目前有一个模型实体来存储不同的状态,我的所有服务都在这个实体中记录它们的问题、成功和状态。我将此实体存储在会话中,但整个过程感觉不对劲 我认为这种状态不仅仅是错误/成功 如果您的视图永远不知道控制器使用了哪个服务来改变模型层的状态,那么您最好的方法是使用当前视图观察模型来实现经典的MVC(或接近MVC)。在这种情况下,每个已使用的服务将在控制器

当模型是一个层并通过服务访问时,如何在MVC中存储模型的状态。您是否将服务级别定为a级状态?当视图可以或不可以使用该特定服务时,该状态将如何传达给视图

我目前有一个模型实体来存储不同的状态,我的所有服务都在这个实体中记录它们的问题、成功和状态。我将此实体存储在会话中,但整个过程感觉不对劲

我认为这种状态不仅仅是错误/成功

如果您的视图永远不知道控制器使用了哪个服务来改变模型层的状态,那么您最好的方法是使用当前视图观察模型来实现经典的MVC(或接近MVC)。在这种情况下,每个已使用的服务将在控制器对其进行操作时通知视图如果是这种情况,则以下内容不适用。

这个坏主意。。 视图和控制器应该共享工厂,工厂负责初始化服务。这意味着,如果您的控制器使用了特定的服务,那么您可以添加查询该工厂已初始化的服务的功能

if ( $this->serviceFactory->hasCached('recongnition') )
但是这不应该是必要的,而且我认为,这是一件非常有害的事情。您将迫使工厂成为UI逻辑的重要部分

注意:在这种情况下,工厂强制每个服务只创建一次,不依赖于全局状态

不同的方法/观点 出于某种原因,你从一个前提开始,即每个观点都必须是全知的。这就是造成你目前困惑的原因

这两个虚构的服务不是无所不知,而是:

  • 会计
    :用于处理发票
  • :用于管理文档
当您查看列出当前文档的页面时,为什么视图会在意
会计
服务中存在错误状态?您将如何实际实现该错误状态

这些服务中的错误状态会影响“登录页面”的外观吗

所以。这里的底线是:即使控制器做了一些事情,这会在模型层的某个地方导致错误状态,视图也应该只知道它,只有在视图需要特定服务时才知道

注意:
当然,因为在web应用程序中,视图和控制器往往成对出现(如果有用于处理“文档列表”的控制器,那么可能也会有相应的视图),所以当控制器使用某些当前视图不知道的服务时,这将是非常罕见的情况。。。实际上,我想不出这种情况的用例

附笔。 实际上,模型层的状态不是保存在服务本身中,而是保存在它们所操作的域对象中

如果使用共享工厂,它可以确保每个服务只初始化一次,那么视图使用的服务将是相同的。这还意味着,服务使用的域对象仍然可以存在(当然,这取决于您的实现)

例如,如果您尝试使用已存在的电子邮件创建用户帐户,则表示帐户详细信息的域对象将在存储抽象获取有关违反
UNIQUE
约束的异常时获取错误状态。要显示良好的“注册失败”页面,服务需要该域对象及其数据和错误状态

我希望有帮助

如果您的视图永远不知道控制器使用了哪个服务来改变模型层的状态,那么您最好的方法是使用当前视图观察模型来实现经典的MVC(或接近MVC)。在这种情况下,每个已使用的服务将在控制器对其进行操作时通知视图如果是这种情况,则以下内容不适用。

这个坏主意。。 视图和控制器应该共享工厂,工厂负责初始化服务。这意味着,如果您的控制器使用了特定的服务,那么您可以添加查询该工厂已初始化的服务的功能

if ( $this->serviceFactory->hasCached('recongnition') )
但是这不应该是必要的,而且我认为,这是一件非常有害的事情。您将迫使工厂成为UI逻辑的重要部分

注意:在这种情况下,工厂强制每个服务只创建一次,不依赖于全局状态

不同的方法/观点 出于某种原因,你从一个前提开始,即每个观点都必须是全知的。这就是造成你目前困惑的原因

这两个虚构的服务不是无所不知,而是:

  • 会计
    :用于处理发票
  • :用于管理文档
当您查看列出当前文档的页面时,为什么视图会在意
会计
服务中存在错误状态?您将如何实际实现该错误状态

这些服务中的错误状态会影响“登录页面”的外观吗

所以。这里的底线是:即使控制器做了一些事情,这会在模型层的某个地方导致错误状态,视图也应该只知道它,只有在视图需要特定服务时才知道

注意:
当然,由于在web应用程序中,视图和控制器往往成对出现(如果有用于处理“文档列表”的控制器,则可能也会有相应的视图),因此当控制器使用某些当前视图不可用的服务时,这将是非常罕见的情况